1

我之前问过这个问题,但可能我不清楚,所以我再次发布。我有一个gui。当我按下“button1”时,我的 gui 启动串行通信。我发送一些命令并接收一些数据。一旦我按下“button1”,我就会在另一个线程(除了 GUI 线程)中持续 3.4 秒,直到数据完全传输。我想要的是一个对话框、弹出窗口或类似的东西(显示一条繁忙的消息),当我按下 button1 时出现在我的 gui 前面,并且这个弹出窗口在另一个线程中自动关闭,其中串行通信发生时整个数据被传输。

有些人建议后台工作,但我不清楚。

考虑到我的情况,一个很好的解释或一种方法?

谢谢

4

1 回答 1

0

我会用下面的代码来做:

  public partial class frmWait : Form
{
    private BackgroundWorker worker;

    public frmWait()
    {
        InitializeComponent();
        this.worker = new BackgroundWorker
            {
                WorkerReportsProgress = true
            };
        this.worker.RunWorkerCompleted += WorkerOnRunWorkerCompleted;
        this.worker.DoWork += WorkerOnDoWork;
        this.worker.ProgressChanged += WorkerOnProgressChanged;
        this.worker.RunWorkerAsync();
    }

    private void WorkerOnProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        // Update UI or something else
    }


    private void WorkerOnDoWork(object sender, DoWorkEventArgs e)
    {
        // Do background-stuff here
    }

    private void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        // Actions after BackgroundWorker is done
        Close();
    }
}

在带有 button1 的表单中,在按钮的单击事件中,您只需:

frmWait wait = new frmWait();
wait.ShowDialog();
于 2013-02-22T08:52:18.327 回答