メインフォームと分析フォームがあります。メインフォームには「フォームの分析を表示」という名前のボタンがあります。分析フォームはスレッドを実行します。また、分析フォームを非表示にする「WorkInBackground」という名前のボタンもあります。
スレッドのプロセスが終了したら、分析フォームが表示され([バックグラウンドで作業]ボタンがクリックされたかどうかに関係なく)、分析フォームの一部のコントロールが有効になっている必要があります。
私の努力を説明するコードがいくつかありますが、正しく機能しません。
では、問題は何ですか、そしてこれを達成するための最良の解決策は何ですか?これについて議論しているサンプルや記事はありますか?
public partial class frmAnalyze : Form
{
Form owner;
public frmAnalyze(frmMain owner)
{
InitializeComponent();
Owner = owner;
}
private void btnAnalyze_Click(object sender, EventArgs e)
{
btnBackgroundWork.Enabled = true;
Analyzer analizer = new Analyzer();
analizer.OnAnalyzeCallback += new AnalyzeCallbackHandler(analizer_OnAnalyzeCallback);
analizer.OnAnalyzeProgress += new
}
void analizer_OnAnalyzeCallback(object sender, EventArgs arg)
{
if (InvokeRequired)
this.Invoke(new AnalyzeCallbackHandler(analizer_OnAnalyzeCallback), sender, arg);
else
{
Owner.Invoke(new AnalyzeCallbackHandler(((frmMain)Owner).ShowfrmAnalyze), sender, arg);
SomeControl.Enabled = true;
}
}
}
これは、InvokeRequiredが常にfalseを返すという奇妙なことであり、これがメインフォームです
public partial class frmMain : Form
{
private void biAnalyze_Click(object sender, EventArgs e)
{
frmAnalyze = new frmAnalyze(this);
frmAnalyze.ShowDialog();
}
internal void ShowfrmAnalyze(object sender, EventArgs e)
{
frmAnalyze.Show();
}
}