0
我有以下情況:WPF - 視窗設定所有者
- 示出了所述參考存儲在一個工具類的窗口。
後來需要出現一個模式對話框以上那個窗口;所以我做了以下內容:
OptionalMessageBox message = new OptionalMessageBox(title, errorMessage.ToString(), MessageImage.Warning); if (UIUtilities.TopWindow != null) { UIUtilities.TopWindow.Dispatcher.Invoke(() => message.Owner = UIUtilities.TopWindow); UIUtilities.TopWindow.Dispatcher.Invoke(() => message.ShowDialog()); } else { message.ShowDialog(); }
然而,這是給經典的「調用線程,因爲不同的線程擁有它無法訪問該對象」雖然我不明白爲什麼,因爲我現在用的是TopWindow變量的調度器。作爲一個說明(並且絕望),我試圖把這些調用放在我剛剛創建的消息變量上 - 這也不起作用,但我沒有想到這會成爲問題,因爲如果我剛剛擁有了它,我現在怎麼擁有它做好了!
任何意見將不勝感激。
謝謝,但需要訪問應用程序的能力 - 對方的回答刪除了要求。 –
您可以隨時訪問應用程序。請注意,「Application.Current.Dispatcher最可能的ReferenceEquals()幾乎總是Window.Dispatcher,這意味着它們是同一個」請參閱http://stackoverflow.com/questions/28703717/the-difference-between-application-調度程序和窗口調度程序 – Ron
另請注意,在其他答案中,如果TopWindow爲空,則不會顯示消息。這不是問題中提出的問題。 – Ron