繁体   English   中英

控件不显示是否在后台线程上运行(c#winform)

[英]controls doesn't show if run on a background thread ( c# winform)

我有一个带有多个控件的表单( 代码中的complexForm ),这需要一些时间才能加载。 因此,我决定放入一个单独的线程中,以减少初始加载时间。 一切正常,除了等待表单(代码中的Form1 )上的标签控件最初没有显示; 在Form1关闭之前仅一秒钟的时间。 所以我的问题是,为什么标签控件不显示?

[STAThread]
static void Main()
{
    Thread thread = new Thread(delegate()
    {
        var wait = new Form1(); //simple form with a label control with text "please wait"
        wait.Show();
        var complexUI = new complexForm();// this takes long time to load
        wait.Dispose();// it will go off even without this method
        // MessageBox.Show("loaded");
    });

    thread.SetApartmentState(ApartmentState.STA);
    thread.Priority = ThreadPriority.Highest;
    thread.IsBackground = true;
    thread.Start();
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new main());

}

不要这样做。 它会以眼泪结束。 仅从UI线程创建UI控件-UI线程是拥有消息泵的线程,这对于正确操作至关重要。

正确的解决方案是创建一个启动屏幕,该屏幕在初始化主窗口时显示。

关于如何创建启动画面,Stack Overflow上有很多线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM