我使用的是一个弹出窗口控件。我有一个显示和隐藏它的方法,我需要实现一个功能,以防止显示和隐藏我的弹出窗口在不同的线程。我可以在UI线程中显示我的弹出窗口吗?
更新
我的问题的主要目标是:
从方法Show开始的哪个线程开始,方法隐藏应该在同一个线程中并不重要。如何实现这个?
public void Show()
{
IsShown = true;
if (this.ChildWindowPopup == null)
{
this.ChildWindowPopup = new Popup();
try
{
this.ChildWindowPopup.Child = this;
}
catch (ArgumentException)
{
throw new InvalidOperationException("The control is already shown.");
}
}
if (this.ChildWindowPopup != null && Application.Current.RootVisual != null)
{
// Configure accordingly to the type
InitializeProgressType();
// Show popup
this.ChildWindowPopup.IsOpen = true;
}
}
public void Hide()
{
IsShown = false;
// Restore system tray
SystemTray.IsVisible = currentSystemTrayState;
this.progressBar.IsIndeterminate = false;
this.ChildWindowPopup.IsOpen = false;
}
答案 0 :(得分:0)
通常,UI组件的工作只能在UI线程中完成。如果你想阻止你的特定弹出窗口从UI线程启动,你需要提供一个启动它的接口,在内部检查它已执行的线程 - 可能使用SynchronizationContext或Thread类,但最后 - 它将需要通过在UI线程上调用方法来显示Popup。