博客园  :: 首页  :: 管理

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

Posted on 2005-12-01 17:11  Paker Liu  阅读(712)  评论(1编辑  收藏  举报

程序有两个部分,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
++;

            }


        }


    }