请教求解,对线程知识匮乏不太懂。具体思路如下:
我有一个WinFrom的程序,在点击按钮的时候起一个线程从数据库里
取值。取完这个值,我还想在继续在button这个主线程里处理逻辑。
大概代码思路如下:
string num = "";
private void btnOK_Click(object sender, EventArgs e)
{
Thread th=new Thread(new ThreadStart(run));
th.Start();//开始线程
//这里怎么线程同步通过线程里取到的值进行逻辑处理
if(num=="ok"){
}
}
private void run(){
//读取数据库的内容。省略。。。最终渠道一个值。
//用MySQLData代表一个从数据库里取出来的一个值赋给num。
num = MySQLData;
}
请各位前辈赐教。
------解决思路----------------------
你这样做是完全没有意义的行为
我以前打过一个比方:
主线程就相当于领导,负责整个公司的运营和对外交互(UI)
子线程就相当于员工
现在领导有个工作,要分配给员工去做,因为不想自己工作的时候影响对外交互
但是他分配完任务,不是去做自己该做的事情,而是跟在员工屁股后面等着,一直等到员工干完了,他才继续干别的
那这个工作他自己做了不就得了,还聘用那个员工干什么
------解决思路----------------------
搜一搜:委托
你应该给线程定义一个回调函数,让线程执行完毕时调用主线程中的一个方法去执行后续的操作
也就是说:员工工作完毕,向领导汇报工作,然后领导再处理后续部分
而不是领导跟在员工屁股后头
------解决思路----------------------
请教就请教 为啥你的每个帖子都要加 "小女子"这3个字呢?
200多个帖子 第一页居然全是满满的 "小妹"......
看的我也是醉了..
不过你这问题直接同步就好了 为啥要用线程呢?
既然是线程丢出去 直接在线程执行完某个方法之后 在调用另外的某个方法就行啦.
------解决思路----------------------
这个问题我也一直想问,你是穿越剧看多了吗,还是你本身就是穿越过来的,句句不离小女子
------解决思路----------------------
如果这样的话,就直接使用异步线程吧, 用委托delegate来实现
------解决思路----------------------
用委托和事件
比如说,水壶烧水,水烧开了报警,报警触发新的动作(你把水壶里的水倒进杯子里喝)
你的代码run,执行完毕后触发一个事件,事件实现你if(num=="ok"){}要做的事情
------解决思路----------------------
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string num = "";
private void btnOK_Click(object sender, EventArgs e)
{
Thread th=new Thread(new ThreadStart(run));
th.Start();//开始线程
}
}
private void run(){
//读取数据库的内容。省略。。。最终渠道一个值。
//用MySQLData代表一个从数据库里取出来的一个值赋给num。
num = MySQLData;
this.BeginInvoke((Action) delegate{
//这里怎么线程同步通过线程里取到的值进行逻辑处理
if(num=="ok"){
};
});
}
后续操作,应该在“后续”才调用,绝不是在 btnOK_Click 执行的。在 btnOK_Click 里只要启动线程,启动要执行的方法,就立刻结束了!
“取完这个值,我还想在继续在button这个主线程里处理逻辑”这是胡乱安排逻辑。
------解决思路----------------------
什么情况?csdn的排版功能难道又抽风了?再试一下
string num = "";
private void btnOK_Click(object sender, EventArgs e)
{
Thread th=new Thread(new ThreadStart(run));
th.Start();//开始线程
}
private void run(){
//读取数据库的内容。省略。。。最终渠道一个值。
//用MySQLData代表一个从数据库里取出来的一个值赋给num。
num = MySQLData;
this.BeginInvoke((Action) delegate{
//这里怎么线程同步通过线程里取到的值进行逻辑处理
if(num=="ok"){
};
});
}