当线程退出并且我确定许可证类型已过期时,我正在尝试打开一个新的子表单(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();
我试图在线程中打开 BuyNowForm,但这会冻结新创建的表单。我不想尝试 Thread.Sleep 并等待几秒钟让进程发送信息。Thread.Join() 似乎冻结了主 UI 几秒钟。Process.Exited += 也不起作用,因为该进程是在线程中创建的,因此当它退出时,BuyNowForm 仍在线程中创建。
大家有什么想不开的吗?