如何从C#中的线程访问非静态方法

时间:2010-08-14 09:52:13

标签: c# multithreading

我不确定这是否是一个好的编程礼仪,无论如何我有一个常规的方法,我更新某些数据和UI元素,如文本块等。

无论如何,我想创建一个每X行数量运行更新方法的线程,但我无法访问它,因为根据我的理解,线程只能运行静态方法。

最好的方法是什么?

谢谢,

毫克

2 个答案:

答案 0 :(得分:9)

  

据我所知,一个线程只能运行静态方法。

这根本不是真的。你可以开始这样一个线程:

Thread thread = new Thread(() => { foo.bar(123, 456); });
thread.Start();

方法栏不一定是静态的,但您需要引用一个对象才能调用实例方法。

如果您有无参数方法,您也可以这样做:

Thread thread = new Thread(bar);

您应该注意,您不能从主线程之外的其他线程修改GUI,因此如果您只想更新GUI,则不应该启动新线程。如果您有一个长时间运行的过程并希望偶尔更新GUI以显示进度而不阻止UI,您可以查看BackgroundWorker

或者,您可以使用Invoke模式从后台线程更新GUI:

private void updateFoo()
{
    if (InvokeRequired)
    {
        Invoke(new MethodInvoker(() => { updateFoo(); }));
    }
    else
    {
        // Do the update.
    }
}

请参阅此相关问题:C#: Automating the InvokeRequired code pattern

答案 1 :(得分:0)

如果要根据线程的进度更新UI元素,您应该查看BackgroundWorker类(http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

相关问题