在长时间操作时显示消息
本文关键字:显示 消息 操作 长时间 | 更新日期: 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!");
}
}
}
您也可以在没有用户界面的情况下使用此原则。编码快乐!