[英]Closing a wpf window created on a different thread from the background worker WorkRunCompleted
[英]WPF Access window created on different UI thread
我在不同的線程上創建了新的Window,因為它具有大量的UI操作,這樣做是為了使主窗口保持平穩運行。 一切正常。
但這是一個問題:
如何訪問新創建的窗口?
調用Dispatcher.Run()
我無法再操縱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)
訪問它,但似乎我誤解了一些核心內容。
我使用兩個WPF Window對象和一個計時器模擬了您的問題,以確保在調用第二個Window之前創建了第二個Window。 下面是我的代碼示例,它每五秒鍾更新一次第二個Windows TextBox:
private Timer _timer;
private SecondWindow _secondWindow;
public MainWindow()
{
InitializeComponent();
CreateVisualisationWindow();
_timer = new Timer(Callback);
_timer.Change(5000, 5000);
}
private void Callback(object state)
{
UpdateSecondWindowText();
}
private void CreateVisualisationWindow()
{
Thread VisualisationWIndowThread = new Thread(ThreadStartingPoint);
VisualisationWIndowThread.SetApartmentState(ApartmentState.STA);
VisualisationWIndowThread.IsBackground = true;
VisualisationWIndowThread.Start();
}
private void ThreadStartingPoint()
{
_secondWindow = new SecondWindow();
_secondWindow.SecondWindowTextBlock.Text = "Hello";
_secondWindow.Show();
Dispatcher.Run();
}
private void UpdateSecondWindowText()
{
_secondWindow.Dispatcher.BeginInvoke(new Action(() =>
{
_secondWindow.SecondWindowTextBlock.Text = _secondWindow.SecondWindowTextBlock.Text + " World";
}));
}
因此,訣竅是,您需要在第二個Window上調用Dispatcher才能訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.