C# WPF主线程在后台线程加载UI时冻结

C# WPF主线程在后台线程加载UI时冻结,c#,wpf,multithreading,dispatcher,C#,Wpf,Multithreading,Dispatcher,我想在应用程序创建复杂屏幕时显示进度条。我的代码是: protected override void LoadSubject(object sender) { var win = new Spinner(); win.Show(); Thread th = new Thread(() => { LoadSubjectImpl(sender); win.Dispatc

我想在应用程序创建复杂屏幕时显示进度条。我的代码是:

protected override void LoadSubject(object sender)
    {
        var win = new Spinner();

        win.Show();

        Thread th = new Thread(() =>
        {
            LoadSubjectImpl(sender);

            win.Dispatcher.BeginInvoke(new Action(() => win.Close()));
        });

        th.Start();
    }

  private void LoadSubjectImpl(object sender)
    {
        Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                StartServiceWorkflow(sender);
            })
            );
    }
它工作正常,但进度条冻结。。。 由于“InvalidoOperationException”,我必须在后台线程中使用dispatcher,我认为这是个问题,但是我能做什么呢

  • 旋转器=肋推进杆

要想达到你所描述的目标,你将没有运气。若你们仔细阅读了InvalidOperationException,你们就会知道你们不能从后台线程操作UI。您使用Dispatcher所做的是将
StartServiceWorkflow
同步到UI线程。因此,您的代码正在其中执行-这导致冻结


要实现某些用户体验增强,您可以将任务委托给后台线程,例如读取表单数据库或处理要显示的数据。

您将无法实现所描述的目标。若你们仔细阅读了InvalidOperationException,你们就会知道你们不能从后台线程操作UI。您使用Dispatcher所做的是将
StartServiceWorkflow
同步到UI线程。因此,您的代码正在其中执行-这导致冻结


要实现某些用户体验增强,您可以将任务委托给后台线程,例如读取表单数据库或处理要显示的数据。

您将无法实现所描述的目标。若你们仔细阅读了InvalidOperationException,你们就会知道你们不能从后台线程操作UI。您使用Dispatcher所做的是将
StartServiceWorkflow
同步到UI线程。因此,您的代码正在其中执行-这导致冻结


要实现某些用户体验增强,您可以将任务委托给后台线程,例如读取表单数据库或处理要显示的数据。

您将无法实现所描述的目标。若你们仔细阅读了InvalidOperationException,你们就会知道你们不能从后台线程操作UI。您使用Dispatcher所做的是将
StartServiceWorkflow
同步到UI线程。因此,您的代码正在其中执行-这导致冻结


要实现某些用户体验增强,您可以将任务委托给后台线程,例如读取表单数据库或处理要显示的数据。

问题在于创建屏幕需要很长时间。要创建屏幕,我必须使用dispatcher在后台如何创建它?问题是创建屏幕需要很长时间。要创建屏幕,我必须使用dispatcher在后台如何创建它?问题是创建屏幕需要很长时间。要创建屏幕,我必须使用dispatcher在后台如何创建它?问题是创建屏幕需要很长时间。要创建屏幕,我必须使用dispatcher,如何在后台创建它?