スレッドが終了したときに新しい子フォーム (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 はまだスレッドで作成されています。
考えられることはありますか?