要求,应用能批量处理在大量计算,在此过程中界面不卡,实时显示计算过程中的数据和状态。
1.在窗体中定义一个用于传递信息的委托和两个实例。
delegate void DeleDisplay(string Message);
DeleDisplay deleDisplayAction;
DeleDisplay deleDisplayState;
2.在窗体中定义一个线程。
Thread thread;
3.窗体中定义两个显示状态和过程的方法
private void DisplayThread(string Message)
{
textBox1.Text += DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + ":" + Message + "\r\n";
textBox1.ScrollToCaret();
if (Message.Contains("工作完成")) button1.Enabled = true;
}
private void DisplayState(string Message)
{
label1.Text = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToLongTimeString() + ":" + Message;
}
4.将显示方法搭载在委托上
private void Form1_Load(object sender, EventArgs e)
{
deleDisplayAction = DisplayThread;
deleDisplayState = DisplayState;
}
5.设计处理据的方法,并在方法中调用委托。
private void ProData()
{
...
for (int i;i<...
{
...
this.Invoke(deleDisplayAction, "正在...");
this.Invoke(deleDisplayAction, "...完成..." );...
}
...
}
6.启动线程
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
thread = new Thread(CheckData);
thread.Start();
}