例如,有二线程,主线程就是一个主FORM,另外一个线程执行一个有事件成员的类实例,
当从线程产事件时,便调用了主FORM线程上的一方法(委托),那么这个方法是在主线程执行呢?还是在从线程执行?如果是在从线程执行?如何让其封送主线程执行?

解决方案 »

  1.   

    根据需要,你也可以提供 evennameBefore、evennameAfter两个事件让调用者自己选择
      

  2.   

    TO flygoldfish(长江支流) 能不能再仔细一点啊,谢谢
      

  3.   

    http://www.baidu.com/s?wd=c%23+%B6%E0%CF%DF%B3%CC+%D6%F7%CF%DF%B3%CC&cl=3
    这是你要的资料,全,
      

  4.   

    事件一般是用在不同类之间的交互,如果你的主线程和另一条线程都是执行同一个类的方法就不需用事件了!
    事件的使用要分为
    首先当然要声明事件,为事件定义一个所属的委托
    第二就是要有代码去触发事件的发生
    第三就是订阅事件(当事件发生时会执行订阅事件委托的函数)//事件所属的委托
    public delegate void eventdelegate(string msg);
    public class A
    {
      public event eventdelegate event1;//.......................
    //触发事件
     private void eventdoing()
     {
        string msg="事件传递的参数!";
        if(event1!=null)
           event1(msg);
     }
    //........
    }这样声明后就可以调用事件了
    A a=new A();
    a.event1+=new eventdelegate(被委托的方法);
    这样当事件发生时你那个被委托的方法就可以被执行了
      

  5.   

    Flashcom(虫虫) ,小虫虫好像你没回答我的问题哦,,,你在教俺怎么写事件代码,这个我会的
      

  6.   

    都可以。典型的Control类实现了ISynchronizeInvoke接口,其中的beginInvoke()函数有如下说明:“在执行此对象的主线程上执行委托。”举个例子,如果你在一个窗体类中加入了某个control类的实例,并订阅了该control类公开的某个event1。而该control类自己开了个子线程,并在此线程中invoke了event1的处理函数,那么这就是一个跨线程的回调事件。
    以上如果没听懂的话,给我邮箱,我发个例子给你。
    刚学C#不久,除了实现了ISynchronizeInvoke接口的方法之外我还不知道其它能跨线程回调事件并传送参数的方法。而一般的直接用delegate似乎只在子线程里调用函数。
    另外,借楼主宝地问个问题。
    上面说的BeginInvoke()除了可以跨线程调用event,还能跨线程传参,可以说非常方便。但是前提是一定要实现了ISynchronizeInvoke接口。但如何实现了ISynchronizeInvoke接口呢?
    除了实现了ISynchronizeInvoke接口还有其它跨线程通信的方法吗?就像原来vc中的postThreadMessage()那样。
    哪位高手指教!
      

  7.   

    如果一定要是主线程执行,就用我先前说的方法吧,把要传递的参数封装成类,委托的方法是把这个封装的类放进一个队列(例如ArrayList),里,再由主线程定时去扫这个队列,有就解出这个封装的类再执行