当前位置: 代码迷 >> C# >> 小女子请问线程同步的有关问题
  详细解决方案

小女子请问线程同步的有关问题

热度:151   发布时间:2016-05-05 05:21:36.0
小女子请教线程同步的问题~
请教求解,对线程知识匮乏不太懂。具体思路如下:

我有一个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"){
                                       };
                            });
        }
  
  相关解决方案