在长时间操作时显示消息

本文关键字:显示 消息 操作 长时间 | 更新日期: 2023-09-27 18:14:56

我有一小段代码,大约需要一分钟左右才能完成。在这段时间里,没有任何迹象表明有任何事情正在发生。工作完成后,将在标签中显示一条消息。表单上的文本。下面是代码:

private void UpdateLesson()
{
    var bridgeBll = new BridgeBll();
    foreach (DataGridViewRow row in this.dataGridView1.Rows)
    {
        bridgeBll.UpdateLesson(row);
    }
    lblMessage.Text = "Saved at " + DateTime.Now.ToShortTimeString();
}

我想做的是显示一个消息框,上面写着"Saving…",然后在操作完成后关闭该消息框。然而,问题是,如果我打开一个消息框,工作将不会开始,直到用户手动关闭消息框,程序继续。

我怎么能做这样的事情呢?

在长时间操作时显示消息

将btnStart按钮和label1标签放在表单上,并使用以下代码:

public partial class Form1 : Form
{
    MyAsyncClass worker;
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    }
    private void btnStart_Click(object sender, EventArgs e)
    {
        label1.Text = string.Format("Worker Started at {0}", DateTime.Now);
        if (worker == null)
        {
            worker = new MyAsyncClass();
            worker.NotifyCompleteEvent += worker_NotifyCompleteEvent;
        }
        worker.Start();
    }
    void worker_NotifyCompleteEvent(string message)
    {
        MessageBox.Show(string.Format("Worker completed with message: {0}", message));
    }
}

这里是worker类:

public class MyAsyncClass
{
    public delegate void NotifyComplete(string message);
    public event NotifyComplete NotifyCompleteEvent;
    public void Start()
    {
        System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(DoSomeJob));
        t.Start();
    }
    void DoSomeJob()
    {
        //just wait 5 sec for nothing special...
        System.Threading.Thread.Sleep(5000);
        if (NotifyCompleteEvent != null)
        {
            NotifyCompleteEvent("My job is completed!");
        }
    }
}

您也可以在没有用户界面的情况下使用此原则。编码快乐!