C# 在线程中打开新的子窗体

C# 在线程中打开新的子窗体,c#,multithreading,winforms,thread-safety,C#,Multithreading,Winforms,Thread Safety,我试图打开一个新的子表单(BuyNow表单),当线程退出时,我确定许可证类型将过期。在一个线程中,我打开一个新的进程来进行许可证计算,并将信息发送回主进程。问题是,线程在收到所有信息之前退出,所以我无法打开BuyNow表单,因为它不知道许可证已经过期 代码如下: BackgroundWorker BW = new BackgroundWorker(); BW.DoWork += (sender, e) => {

我试图打开一个新的子表单(BuyNow表单),当线程退出时,我确定许可证类型将过期。在一个线程中,我打开一个新的进程来进行许可证计算,并将信息发送回主进程。问题是,线程在收到所有信息之前退出,所以我无法打开BuyNow表单,因为它不知道许可证已经过期

代码如下:

        BackgroundWorker BW = new BackgroundWorker();
        BW.DoWork += (sender, e) =>
            {
                Process.Start("LicenseManager.exe", "-Check");
                // PSI Info, DataRecieved Event Args and etc.. included in Process.
                // Opens the process which takes about 5 second to calculate and post
                // license information. Then LicenseMode changes to TrialExpired
                // if not activated and trial expired.
            };
        BW.RunWorkerCompleted += (sender, e) =>
            {
                // This never gets executed because License is not changed to TrialExpired by the time BW is completed.
                if (LicenseMode == License.TrialExpired)
                {
                   new BuyNowForm().Show();
                }
            };
        BW.RunWorkerAsync();
我试图在线程中打开BuyNow表单,但这冻结了新创建的表单。我不想尝试Thread.Sleep,请多等几秒钟,等待进程发送信息。Join()似乎将主UI冻结了几秒钟。Process.Exited+=也不起作用,因为该进程是在线程中创建的,所以当它退出时,BuyNowForm仍在线程中创建


你们能想到什么吗?

这个
过程
类有一个
WaitForExit
方法。令人惊讶的是,这将等待进程退出。你必须(显然)在
DoWork
中这样做


您不应该从另一个线程打开表单(对于
DoWork
RunWorkerCompleted
将是正确的方式,因为它是在主GUI线程中执行的。

哦,我的天哪!我考虑了这么多,我忽略了最简单的解决方案lol。非常感谢你的帮助(:-解决了问题。将在10分钟内“接受”(要求)。只是为了更新,我也可以通过调用它来打开它。这将修复冻结错误。