我找到了很多关于如何在UI线程上调用函数的资源,但是我的一些逻辑只允许从主线程运行。有没有办法获取主线程上的调度程序并在其上调用?
我找到了很多关于如何在UI线程上调用函数的资源,但是我的一些逻辑只允许从主线程运行。有没有办法获取主线程上的调度程序并在其上调用?
while (true) Console.WriteLine("x");
你要如何在那个线程上调用一些内容呢?那是不可能的,因为该线程正在忙于执行其他任务,它不愿配合。
我有点怀疑你是否需要在“主线程”上调用某些内容。但我会按照字面意思回答这个问题。你需要让主线程配合并接受来自其他线程的工作。也许可以使用 Action
队列或布尔标志告诉该线程执行特定操作。
Monitor.Wait
,当函数完成时,主线程将发出信号。编辑:OP提问的程序确实有单独的UI和主线程...
您可以随时使用以下方法创建新的线程/任务:
tokenSource = new CancellationTokenSource();
token = tokenSource.Token;
Task.Factory.StartNew(() =>
{
doSomeWork();
}, token);
令牌用于取消任务。如果出现问题或任务挂起,您可以取消它。您可能已经阅读了有关TPL库的信息,但如果没有,请查看并确定它是否适用于您想要执行的操作。
为了使我的答案更完整,我想添加这个...我不确定这在您的情况下是否有效,但在正常情况下,您会像这样更新或处理主线程中的对象。
private void doSomeWork()
{
// do work here -->
if (someObject.InvokeRequired)
{
someObject.BeginInvoke((Action)delegate() { someObject.Property = someValue; });
}
else
{
someObject.Property = someValue;
}
}
public static void Main(string[] args)
)。 - Psymunn