[转贴]如何解决MainForm和辅助线程之间的通信问题

程序有两个部分,MainForm和一个WorkThread,实现的动作是WorkThread计数,并在计数后通过事件或委托通知MainForm更新界面。

无论是使用事件还是委托,都能正确实现上述功能。但是在进行跟踪时,通过监视线程执行情况,发现一些问题:使用事件时,更新界面的方法是附着在WorkThread线程中执行的,而使用委托的时候,则是附着在主窗体线程中实现,这是为什么呢?

以下是相关代码片断:

MainForm:

         public  WorkThread work;

        
private   void  Start_Click( object  sender, System.EventArgs e)

        
{

            work 
= new WorkThread ();

            work.Notify 
+= new WorkThread .NotifyEventHandler(ShowSample);

        }


        
public   void  ShowSample( int  num)

        
{

            textResult.Text 
= num.ToString();

        }
WorkThread:
     public   class  WorkThread

    
{

        
public delegate void NotifyEventHandler(int num);

        
public event NotifyEventHandler Notify;

        
public Thread myThread;

        
private main;

        
public WorkThread(MainForm pForm)

        
{

            main 
= pForm;

            myThread 
= new Thread(new ThreadStart(Work);

            myThread.Start();

        }


        
private void Work()

        
{

            
int i = 0;

            
object[] args = new object[1];

            
while(true)

            
{

                Thread.Sleep(
1000);

                args[
0= i;

                
//main.BeginInvoke(new NotifyEventHandler(main.ShowSample),args);   //使用委托

                Notify(index,i);   
//使用事件

                i
++;

            }


        }


    }

你可能感兴趣的:(form)