显示/隐藏正在运行线程的表单的最佳解决方案

本文关键字:表单 最佳 解决方案 线程 运行 隐藏 显示 | 更新日期: 2023-09-27 18:32:23

我有一个主窗体和一个分析窗体。主窗体有一个名为"显示分析窗体"的按钮。分析窗体将运行一个线程。它还具有一个名为"在后台工作"的按钮,该按钮将隐藏分析表单。
线程的进程完成后,应显示分析窗体(无论是否单击了"在后台工作"按钮),并且应启用分析窗体中的某些控件。
我有一些代码来描述我的努力,但它无法正常工作。
那么问题出在哪里,实现这一目标的最佳解决方案是什么?是否有任何示例或文章讨论此内容?

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;
        }
    }
}

这很奇怪,调用要求总是返回假这是主要形式

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();
    }
}

显示/隐藏正在运行线程的表单的最佳解决方案

我想你必须在AnalyzerForm中使用BackgroundWorker thread。

您可以在主线程中执行 BackgroundWorker.OnRunWorkerDone 时显示 AnalyzerForm backk。