C# 多线程UI,无法启动InVoke

C# 多线程UI,无法启动InVoke,c#,wpf,multithreading,C#,Wpf,Multithreading,我需要在主UI线程之外的单独线程上启动一个窗口。这不理想,我知道这不正常 新窗口按如下方式启动: private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) { var thread = new Thread(() => { var w = new ScrollingBanner(300,70,0,0);

我需要在主UI线程之外的单独线程上启动一个窗口。这不理想,我知道这不正常

新窗口按如下方式启动:

private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            var thread = new Thread(() =>
                {
                    var w = new ScrollingBanner(300,70,0,0);
                    w.Show();
                    w.Name = "BannerThread";

                    w.Closed += (sender2, e2) => w.Dispatcher.InvokeShutdown();

                    Dispatcher.Run();
                });               
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();

        }
这将启动窗口并执行我需要它执行的操作

此(线程化)UI窗口上的控件调用我在窗口后面的代码中侦听的事件,如下所示:

 private void ContentTicker_OnScrollComplete(object sender, EventArgs e)
    {
        Debug.WriteLine("Scroller Ended");

        try
        {
            if (CheckAccess())
            {
                sliderText.Text = "Updated Text";
            }
            else
            {
                Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                                                       new Action(() => sliderText.Text = "Updated Text"));
            }
        }
        catch (Exception ex)
        {
            //breakpoint
        }        
    }
ContentTicker_OnScrollComplete从运行控件的后台线程调用

我得到一个例外,一个不同的线程拥有这个控件;但据我所知,我正在调用调度程序在正确的线程上执行操作。(如果我在主UI线程上执行所有这些操作,该功能将起作用)

如何在正确的线程上更新“sliderText”

谢谢

更换此:

Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                                                   new Action(() => sliderText.Text = "Updated Text"))
为此:

Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                                                   new Action(() => sliderText.Text = "Updated Text"))
因为
Application.Current.Dispatcher
将返回“主”调度器,而不是“辅助”调度器