C# 我可以吗;块;函数,直到异步线程完成?
我在WinForm上有以下代码:C# 我可以吗;块;函数,直到异步线程完成?,c#,multithreading,winforms,C#,Multithreading,Winforms,我在WinForm上有以下代码: private void buttonStart_Click(object sender, EventArgs e) { Task.Factory.StartNew(() => ThreadFunction()) .ContinueWith(t => ThreadFunctionComplete() , CancellationToken.None , TaskContinuationOptio
private void buttonStart_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() => ThreadFunction())
.ContinueWith(t => ThreadFunctionComplete()
, CancellationToken.None
, TaskContinuationOptions.None
, TaskScheduler.FromCurrentSynchronizationContext());
ThreadFinished();
}
我只想在
ThreadFunctionComplete()
完成后才开始ThreadFinished()
。嗯,我可以将ThreadFinished()
放在ThreadFunctionComplete()
的末尾,但对于流程的某些工作流,我不会这样做。可能吗?可能是一种等待/锁定?基本上,您只需调用ContinueWith
两次:
Task.Factory.StartNew(....)
.ContinueWith(...)
.ContinueWith(...)
您可以使用Wait(),但它将阻止当前线程
Task.Factory.StartNew(...).Wait();
或者添加另一个ContinueWith()
为什么你不能再次使用
ContinueWith()
,这次使用ThreadFinished()
?你使用的是哪个版本的C?为什么你不在任务结束时像使用ThreadFunctionComplete
那样简单地将它排队?@NicholasButler我想你指的是哪个版本的C以及VS和.net(假设你不想使用beta-BCL-lib)你在使用吗?@Aron我问如果使用async/await
是一个不错的解决方案,那么它是否是一个选项。Wait
在这种情况下会阻止用户界面是的。我注意到了这一点。
Task.Factory.StartNew(...).ContinueWith(t => ThreadFinished());