2

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

考えられることはありますか?

4

1 に答える 1