none
关于在新建线程中显示窗体的问题 RRS feed

  • 问题

  • 想在程序时显示个提示窗体,有以下代码:
            public void Start()
            {
                TipWorker.RunWorkerAsync();
            }

            public void Stop()
            {
                if (FrmTip != null) FrmTip.Invoke(new InvokeDelegate(FrmTip.Close));
            }

            private void TipWorker_DoWork(object sender, DoWorkEventArgs e)
            {
                FrmTip = new FrmBusyTip();
                FrmTip.Show();
            }

    实际执行效果:
    1、提示窗体显示不正常,黑呼呼的一片
    2、调用Stop后提示窗体仍然无法关闭
    3、Stop函数中偶尔出现异常:正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起

    将FrmTip.Show()换为FrmTip.ShowDialog()后,似乎好了一些,能够正常显示,能够正常关闭。但首次显示时,仍然不正常。

    请大虾们看看,谢了~
    是不是与新开的线程有关?
    2009年7月10日 3:24

答案

  • 你好,

    这里应该使用: ShowDialog,如果是Show,创建Form的Thread已经结束运行了,Form得不到Windows消息了。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 泉子 2009年7月13日 7:06
    2009年7月13日 6:45
    版主