GUI busy message

本文关键字:message busy GUI | 更新日期: 2023-09-27 18:00:36

我之前问过这个问题,但可能我不清楚,所以我再次发帖。我有一个gui。当我按下"button1"时,我的gui开始串行通信。我发送一些命令并接收一些数据。一旦我按下"button1",我将在另一个线程(GUI线程除外)中停留3,4秒,直到数据完全传输我想要的是当我按下按钮1时,在我的gui前面出现一个对话框、弹出窗口或类似的东西(显示忙消息),并且当整个数据传输时,这个弹出窗口在进行串行通信的另一个线程中自动关闭。

有人建议我做幕后工作,但我不清楚。

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

感谢

GUI busy message

我会用以下代码来完成:

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