C# 工作流后台线程-如何等待

C# 工作流后台线程-如何等待,c#,multithreading,unit-testing,mstest,workflow-foundation-4,C#,Multithreading,Unit Testing,Mstest,Workflow Foundation 4,我有一个持久的工作流(由WorkflowApplication类运行),我需要对运行该工作流的正确性进行单元测试 我正在从单元测试运行工作流,所有运行正常,但我在输出窗口中收到错误消息: System.AppDomainUnloadexException:尝试访问卸载的AppDomain。如果测试启动了一个线程但没有停止它,则可能发生这种情况。确保测试启动的所有线程在完成之前都已停止 我想在持久化和卸载工作流后测试其运行结果,所以我使用如下代码: AutoResetEvent waitHandl

我有一个持久的工作流(由WorkflowApplication类运行),我需要对运行该工作流的正确性进行单元测试

我正在从单元测试运行工作流,所有运行正常,但我在输出窗口中收到错误消息:

System.AppDomainUnloadexException:尝试访问卸载的AppDomain。如果测试启动了一个线程但没有停止它,则可能发生这种情况。确保测试启动的所有线程在完成之前都已停止

我想在持久化和卸载工作流后测试其运行结果,所以我使用如下代码:

AutoResetEvent waitHandle = new AutoResetEvent(false);
WorkflowApplication wfApp = new WorkflowApplication(workflowTypeInstance, inputs);
wfApp.Unloaded = delegate(WorkflowApplicationEventArgs e)
{   
    waitHandle.Set();
};
// ....
wfApp.Run();
waitHandle.WaitOne();
问题是,工作流应用程序后台线程不会在卸载工作流后立即终止,但测试方法会终止。这将导致输出窗口中出现错误消息


有什么想法/方法/要点如何等待后台线程终止吗?

您在谈论哪个线程?该线程如何跨越appdomain边界?如果线程未跨越应用程序域边界,则不会发生此异常。所以我猜这个异常不是因为您创建的线程,而是因为单元测试框架创建的线程。或者您自己正在创建多个应用程序域?我的代码不会创建任何线程。线程是由工作流基础线程创建的,其中工作流被执行。在工作流被持久化并卸载一段时间后,此线程保持活动状态,但当测试方法完成时,单元测试将卸载应用程序域,从而导致异常ocurs。如果我在卸载工作流后添加一点延迟(例如1500毫秒),则不会出现异常。我在WF应用程序中不擅长,但您是否检查了回调,这可能会有所帮助。@SriramSakthivel感谢您的观点,但只有在工作流完成时才会调用Completed callback。在我的例子中,工作流并没有完成,它被持久保存在书签上,因此并没有引发完成的回调。请检查CodePlex上的项目。在您的特定情况下,您可能希望查看主题。