C#MethodInvoker - 如何在B类的A类线程中调用方法?

时间:2011-09-05 06:29:17

标签: c# multithreading progress-bar

我找不到任何可以解决我情况的事情,我不知道如何处理它。设置:

  1. Form1:选择一些活动并选择go。
  2. Form1创建ClassA,它根据任务数以编程方式使用多个进度条。
  3. Form1调用ClassB中的方法来执行必需的活动,并将自身的实例传递给B类。
  4. B类启动线程进行处理并返回。
  5. 我想要做的是经常从ClassB调用Form1.ClassA.updateProgressBar(index)。

    MehtodInvoker似乎是正确的方式,但我不知道如何去做。我正在想一些类似......的事情。

    form.Invoke((MehtodInvoker) delegate { 
         Form1.prog.incProgressBar(name);
    })
    

    其中prog是ClassA ......

    谢谢, 礼

3 个答案:

答案 0 :(得分:1)

ClassB在非UI线程中运行,因此您需要确保在Form1的UI线程中更新进度条。

in Form1:

public void UpdateProgressBar(int index)
{
    if (InvokeRequired)
    {
        Invoke(new Action<int>(i => UpdateProgressBar(i)), index);
    }
    else
    {
        prog.updateProgressBar(index);
    }
}



in ClassB:

form1.UpdateProgressBar(index);

答案 1 :(得分:0)

属性和类成员的默认可见性是私有的,即prog是私有的,不可访问。

答案 2 :(得分:0)

试试这个:

form.Invoke((MehtodInvoker) delegate { 
    form.prog.incProgressBar(name);
})