在不同的UI线程上创建的WPF访问窗口

时间:2018-12-05 09:16:51

标签: c# wpf multithreading

我在不同的线程上创建了新的Window,因为它具有繁重的UI操作,这样做是为了使我的主窗口平稳运行。一切正常。

但这是问题:
如何访问新创建的窗口?
调用visualisationWindow之后,我将无法再操作 private void CreateVisualisationWindow() { Thread VisualisationWIndowThread = new Thread(new ThreadStart(ThreadStartingPoint)); VisualisationWIndowThread.SetApartmentState(ApartmentState.STA); VisualisationWIndowThread.IsBackground = true; VisualisationWIndowThread.Start(); } private void ThreadStartingPoint() { Visualisation visualisationWindow = new Visualisation(); visualisationWindow.Show(); System.Windows.Threading.Dispatcher.Run(); } 。我想继续访问该新创建的窗口对象。

这是我的窗口的创建方式:

System.Windows.Threading.Dispatcher.FromThread(VisualisationWIndowThread)

我也尝试通过INSERT INTO MyDatabase.dbo.Users ( FirstName, LastName, UserID, PasswordSalt, Password, PasswordChanged, UserName) SELECT FirstName, LastName, UserID, PasswordSalt, Password, PasswordChanged, UserName FROM MyDatabase2.dbo.Users 访问它,但似乎我误解了一些核心内容。

1 个答案:

答案 0 :(得分:0)

我使用两个WPF窗口对象和一个计时器模拟了您的问题,以确保在调用第二个窗口之前创建了第二个窗口。下面是我的代码示例,它每五秒钟更新一次第二个Windows TextBox:

        mtvMarque.setEllipsize(TextUtils.TruncateAt.MARQUEE);
        mtvMarque.setSelected(true);
        mtvMarque.setSingleLine(true);

窍门是,您需要在第二个窗口上调用Dispatcher才能访问它。