单应用程序在应用程序运行完毕后才会显示

时间:2014-02-21 00:43:41

标签: mono

我有一个正在生产的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

1 个答案:

答案 0 :(得分:0)

应用程序事件在Mono Framework中不起作用。该应用程序旨在运行并立即开始下载,同时在主窗体中显示下载的状态。这在.net中运行良好,但在Mono中运行不正常。解决方法是使用优秀的Background Worker组件,该组件存在于.Net Framework 2.0中。它具有将进度报告回父线程的机制,这些机制不需要使用InvokeRequired。感谢Mark Hall指出代码中的原始设计缺陷。