C# 单击在第二个线程上创建的WPF窗口会导致它停止响应

C# 单击在第二个线程上创建的WPF窗口会导致它停止响应,c#,.net,wpf,multithreading,dispatcher,C#,.net,Wpf,Multithreading,Dispatcher,在我当前的项目中,我正在第二个线程中创建一个基于WPF的进度窗口。有关如何执行此操作的详细信息,请参阅我的 在第二个线程上打开我的进度窗口的委托方法如下所示: void ShowProgressWindow() { this.progressWindow = new ProgressWindow(); progressWindow.Show(); //Causes dispatcher to shutdown when window is closed prog

在我当前的项目中,我正在第二个线程中创建一个基于WPF的进度窗口。有关如何执行此操作的详细信息,请参阅我的

在第二个线程上打开我的进度窗口的委托方法如下所示:

void ShowProgressWindow()
{
    this.progressWindow = new ProgressWindow();
    progressWindow.Show();

    //Causes dispatcher to shutdown when window is closed
    progressWindow.Closed += (s, e) => Dispatcher.CurrentDispatcher.BeginInvokeShutdown(DispatcherPriority.Background);

    //Notifies other thread the progress window is open when the dispatcher starts up
    System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(new Func<bool>(_progressWindowWaitHandle.Set));

    //Starts the dispatcher
    System.Windows.Threading.Dispatcher.Run();


    //Forces the worker to cancel work
    workerInstance.RequestCancel();
}
如果我在这个方法中设置了一个断点,那么在我点击这个按钮之后,它永远不会被击中

我的按钮的XAML是相当标准的

<Button x:Name="cancelButton"  Content="Cancel" Grid.Row="7" HorizontalAlignment="Right" Grid.Column="1" Margin="0,0,12,12" Width="75" Height="23" VerticalAlignment="Bottom" Click="cancelButton_Click" />

在进一步处理这个问题之后,我意识到单击窗口中的任何位置,而不仅仅是取消按钮,都会导致它停止响应。当窗口第一次打开时,我可以通过抓取标题栏在屏幕上拖动它,但是如果我单击窗口内的任何位置,它将冻结。

有几种方法可以在UI线程上运行一些代码。。。我喜欢这样:

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate()
{
    // Open window here
});

试着从UI线程打开它?这是一种非常不典型的情况。我的工具是另一个软件的插件,它实际上提供了运行我的代码的线程。我的代码必须在软件提供的线程上完成实际工作,因此必须在第二个线程中创建进度窗口。您是否解决过这个问题?您尝试使用的Revit版本是什么?我在Revit 2012上遇到了完全相同的问题
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate()
{
    // Open window here
});