我有一个正在生产的C#应用程序,我们现在正尝试使用Mono在Mac上运行。该程序编译成单个可执行文件,没有额外的DLL。它显示一个窗口,然后开始下载文件,显示每个文件的状态。它作为独立程序运行良好,但是当我在Mono(在Windows上)下运行时,主窗体窗口不会出现,直到所有文件都被下载。
我在表单开头尝试了以下代码(OnLoad事件),但没有什么区别:
private void OnLoad(object sender, EventArgs e)
{
...
this.Show();
this.BringToFront();
this.Focus();
this.Select();
this.Refresh();
Application.Doevents();
...
有关为什么这应该在C#中运行良好而不是在Mono Windows中运行的任何想法?它在Mac上也有相同的行为,因此它不仅仅是一个Windows问题。
谢谢,Neil
答案 0 :(得分:0)
应用程序事件在Mono Framework中不起作用。该应用程序旨在运行并立即开始下载,同时在主窗体中显示下载的状态。这在.net中运行良好,但在Mono中运行不正常。解决方法是使用优秀的Background Worker组件,该组件存在于.Net Framework 2.0中。它具有将进度报告回父线程的机制,这些机制不需要使用InvokeRequired。感谢Mark Hall指出代码中的原始设计缺陷。