我不确定这是否是一个好的编程礼仪,无论如何我有一个常规的方法,我更新某些数据和UI元素,如文本块等。
无论如何,我想创建一个每X行数量运行更新方法的线程,但我无法访问它,因为根据我的理解,线程只能运行静态方法。
最好的方法是什么?
谢谢,
毫克
答案 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.
}
}
答案 1 :(得分:0)
如果要根据线程的进度更新UI元素,您应该查看BackgroundWorker类(http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)