点击按钮之后,程序就无响应了,应该是UI假死,这种该如何做呢?
对于,多次按成不是很熟悉,望指点 private void btnStart_Click(object sender, EventArgs e)
{
Init();//此方法耗时较长
this.btnStart.Enabled = false;
while (true)
{
Thread newThread = new Thread(new ThreadStart(doSomeThing));
//设置为单元线程
newThread.SetApartmentState(ApartmentState.STA);
newThread.Start();
Application.DoEvents();
Thread.Sleep(20000);
} } private void doSomeThing()
{
StartImage();//此方法耗时较长
Invoke(new myDelegate(StartImage));
}
对于,多次按成不是很熟悉,望指点 private void btnStart_Click(object sender, EventArgs e)
{
Init();//此方法耗时较长
this.btnStart.Enabled = false;
while (true)
{
Thread newThread = new Thread(new ThreadStart(doSomeThing));
//设置为单元线程
newThread.SetApartmentState(ApartmentState.STA);
newThread.Start();
Application.DoEvents();
Thread.Sleep(20000);
} } private void doSomeThing()
{
StartImage();//此方法耗时较长
Invoke(new myDelegate(StartImage));
}
我程序需要10分钟或者5分钟执行一次StartImage 方法,这个不确定,应该是配置的,我这只是写了数字。。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
this.Invoke(new MethodInvoker(delegate()
{
//更新UI,提示正在执行后台操作
this.lable1.Text = "正在计算...";
}));
//长时间处理的代码
Thread.Sleep(100000);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Invoke(new MethodInvoker(delegate()
{
//更新UI,提示正在执行后台操作
this.lable1.Text = "计算完成^_^";
}));
}