我有一个主表格和一个分析表格。主窗体有一个名为“show analyze form”的按钮。
分析表单将运行一个线程。它还有一个名为“在后台工作”的按钮,它将隐藏分析表格
当线程处理完成后,应显示分析表单(是否单击“在后工作”按钮),并且应启用分析表单中的某些控件。
我有一些代码来描述我的努力,但它无法正常工作
那么问题是什么,以及实现这一目标的最佳解决方案是什么?有没有样品或文章讨论过这个问题?
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();
}
}
答案 0 :(得分:0)
我猜你必须在AnalyzerForm中使用BackgroundWorker线程。
您可以在主线程中执行的BackgroundWorker.OnRunWorkerCompleted时显示AnalyzerForm。