C# 我可以吗;块;函数,直到异步线程完成?

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

我在WinForm上有以下代码:

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());