我在Windows Form主线程中,点击Button1,启动新线程(BackThread),以处理比较耗时的业务。
BackThread线程处理流程:(1-->2-->3)
1>通过Invoke(new MyDelegate(...))方式,将主线程隐藏的更新图片和Laber(lblWait)显示出来(.Visible=true), lblWait.Text="正在处理,请稍候...";2>处理业务逻辑,BackProcess(...)---该方法比较耗时,可能需要几分钟;3>业务逻辑完成,将图片和文本隐藏。结果: 虽然用多线程,仍出现假死现象。图片和文本都没有显示.BackThread运行结束后,主窗体(主线程)才恢复正常.问题: 如何通过多线程,解决主窗体假死,通过新线程来处理耗时的业务,并在主窗体中,利用动画和文本提示用户业务正在处理。同时,不影响主窗体的其他操作。请帮忙指点一下......
BackThread线程处理流程:(1-->2-->3)
1>通过Invoke(new MyDelegate(...))方式,将主线程隐藏的更新图片和Laber(lblWait)显示出来(.Visible=true), lblWait.Text="正在处理,请稍候...";2>处理业务逻辑,BackProcess(...)---该方法比较耗时,可能需要几分钟;3>业务逻辑完成,将图片和文本隐藏。结果: 虽然用多线程,仍出现假死现象。图片和文本都没有显示.BackThread运行结束后,主窗体(主线程)才恢复正常.问题: 如何通过多线程,解决主窗体假死,通过新线程来处理耗时的业务,并在主窗体中,利用动画和文本提示用户业务正在处理。同时,不影响主窗体的其他操作。请帮忙指点一下......
public partial class Form1 : Form
{
private int i;
private delegate void myDelegate(); public Form1()
{
InitializeComponent();
} private void btnAlert_Click(object sender, EventArgs e)
{
MessageBox.Show("Other thing is running!");
} private void btnStart_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(RunBack)); t.Start();
} private void RunBack()
{
if (this.txtName.InvokeRequired || this.pbProcess.InvokeRequired)
{
BeginInvoke(new myDelegate(ModifyValue));
}
}
private void ModifyValue()
{
//PictureBox: pbProcess
this.pbProcess.Visible = true; while (i<20)
{
this.txtName.Text = i.ToString(); i++; Thread.Sleep(500);
}
} }
{
this.txtName.Text = i.ToString(); i++; Thread.Sleep(500);
}
private System.ComponentModel.BackgroundWorker backgroundWorker1;
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);然后
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (i < 20)
{
this.txtName.Invoke((MethodInvoker)delegate { this.txtName.Text = i.ToString(); });
i++;
Thread.Sleep(1000);
}
}
然后
private void btnAlert_Click_1(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
invoke 是同步调用,使用 begininvoke
http://code.kingofcoders.com10TB代碼Search engine
http://search.kingofcoders.com編程王10TB代碼庫
http://code.kingofcoders.com10TB代碼Search engine
http://search.kingofcoders.com編程王10TB代碼庫
http://code.kingofcoders.com10TB代碼Search engine
http://search.kingofcoders.com編程王10TB代碼庫
http://code.kingofcoders.com10TB代碼Search engine
http://search.kingofcoders.com編程王10TB代碼庫
http://code.kingofcoders.com10TB代碼Search engine
http://search.kingofcoders.com編程王10TB代碼庫
http://code.kingofcoders.com10TB代碼Search engine
http://search.kingofcoders.com編程王10TB代碼庫
http://code.kingofcoders.com10TB代碼Search engine
http://search.kingofcoders.com