日期:2014-05-19  浏览次数:20922 次

UI线程注册的回调函数能够保证被该线程自己回调吗?


假设有这个一个窗体程序.    
上有一个按钮button1,     Click事件中     用来启动一个工作线程.    
                                              private     void     button1_Click(object     sender,     System.EventArgs     e)    
                                              {    
                                                                      thrd     =     new     Thread(new     ThreadStart(doSth));    
                                                                      thrd.Start();    
                                              }    
 
该程序还有一个timer1控件,timer1_tick的回调函数中有一个调用    
                      button1_Click(null,null);    
 
换句话说按下button1和     计时到     都会启动一个工作线程.    
 
我现在只想在启动线程前判断一下工作线程是否存在    
我知道像button1_Click事件的回调应该是不可重入的,但不知道像     timer_tick     这样的    
  亦或是     其他的在UI线程内注册的回调函数     是否都能够保证     由UI主线程,而不是线程池中的线程来回调?    
即在button1的click事件对   button1_Click事件进行调用时,   timer_tick事件会在队列中等待   因为其必须要由UI线程来执行?
button   click事件     ->   调用button_click   ->   启动线程   ->   调用button_click结束
        timer   tick     事件     ->                                           -> 调用button_click     -> 启动线程     ...
所以我想知道    
UI线程注册的回调函数是否能够保证由该线程自己执行.     (试了几次,似乎都如此)
多谢!

------解决方案--------------------
好像应该如此,因为你只是单线程嘛