我不确定这是否是一个好的编程礼仪,无论如何我有一个常规的方法,我更新某些数据和UI元素,如文本块等.
无论如何,我想创建一个线程,每X个Seconds运行更新方法,但我无法访问它,因为据我所知,线程只能运行静态方法.
围绕这个最好的方法是什么?
谢谢,
毫克.
据我所知,一个线程只能运行静态方法.
这是不正确的.你可以像这样开始一个线程:
Thread thread = new Thread(() => { foo.bar(123, 456); });
thread.Start();
Run Code Online (Sandbox Code Playgroud)
方法栏不必是静态的,但您需要引用一个对象才能调用实例方法.
如果您有无参数方法,您也可以这样做:
Thread thread = new Thread(bar);
Run Code Online (Sandbox Code Playgroud)
您应该注意,您不能从主线程之外的其他线程修改GUI,因此如果您只想更新GUI,则不应该启动新线程.如果您有一个长时间运行的进程并希望偶尔更新GUI以显示进度而不阻止UI,则可以查看BackgroundWorker.
或者,您可以使用Invoke模式从后台线程更新GUI:
private void updateFoo()
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(() => { updateFoo(); }));
}
else
{
// Do the update.
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅此相关问题:C#:自动调用InvokeRequired代码模式
| 归档时间: |
|
| 查看次数: |
6555 次 |
| 最近记录: |