怎么优先响应线程里的对话框
如何优先响应线程里的对话框?
我在线程里调用了Form1对一个成员函数test,里面弹出对话框,我想此时阻塞其它所有线程,必须让用户点击确定才能返回主界面 应该怎么做
------解决思路----------------------
基本上,这是传统的“顺序程序思维”在作怪。而.net的await语法有更是容易误导了一些人、编写出性能恶劣的“所谓多线程”程序。
在设计上,当你进行多线程开发时,你的后续任务应该由子线程的回调触发。这是连 javascript 程序员都已经习惯了的程序设计风格。你的主线程该干什么还去干什么,而你这里能够想到要干的事情,不是主线程去干,而是注册为子线程的回调委托来完成。
------解决思路----------------------
test方法改成:
Thread myth = new Thread(new ParameterizedThreadStart(runpro));
myth.Start(this);
public void runpro(object obj)
{
((Form1)obj).test();
}
public void test()//Form1的成员函数
{
MessageBox.Show("1");
}
我在线程里调用了Form1对一个成员函数test,里面弹出对话框,我想此时阻塞其它所有线程,必须让用户点击确定才能返回主界面 应该怎么做
------解决思路----------------------
基本上,这是传统的“顺序程序思维”在作怪。而.net的await语法有更是容易误导了一些人、编写出性能恶劣的“所谓多线程”程序。
在设计上,当你进行多线程开发时,你的后续任务应该由子线程的回调触发。这是连 javascript 程序员都已经习惯了的程序设计风格。你的主线程该干什么还去干什么,而你这里能够想到要干的事情,不是主线程去干,而是注册为子线程的回调委托来完成。
------解决思路----------------------
test方法改成:
public void test()//Form1的成员函数
{
if (this.InvokeRequired)
{
this.Invoke((Action)delegate { test(); });
return;
}
MessageBox.Show("1");
}