ユーザーがボタンをクリックしてプロセスを開始する場所からwinformがあり、別のスレッドで実行されている別のwinformに実行中のプロセス情報を表示します。ボタンクリックのコードは次のとおりです。
private void btn_Click(object sender, EventArgs e)
{
Thread th=new Thread(ShowInfoForm);
th.Start();
//Code for process execution
EditInfoForm();
th.Join();
this.BringToFront();
}
private void ShowInfoForm()
{
infoForm = new InfoForm();
infoForm.showBox("Process Started", infoForm.MsgLevel.INFO,ButtonOK.DISABLED);
}
private void EditInfoForm()
{
infoForm.Invoke((MethodInvoker)(() => infoForm.EditBox("Process Completed", infoForm.MsgLevel.INFO,ButtonOK.ENABLED));
}
bringToFront
メインスレッドでの呼び出しを除いて、すべて正常に動作します。「OK」ボタンをクリックして情報フォームを終了した後、メインフォームは z オーダーに戻ります。どうすればこれを解決できますか?
PS UI を同じスレッドに保持し、バックグラウンド スレッドでプロセスを実行することがベスト プラクティスであることは理解していますが、これは大量のコードであり、編集できません。