void Start()
{
System.Windows.Controls.Primitives.Popup p = new System.Windows.Controls.Primitives.Popup();
p.HorizontalOffset = this.ActualWidth / 2;
p.Width = 100;
p.Height = 100;
p.VerticalOffset = this.ActualHeight / 2;
DockPanel dock = new DockPanel();
dock.Children.Add(new Button() { Content = "Обновлено" });
p.Child = dock;
p.IsOpen = true;
Thread t = new Thread(StopPopup);
t.Start(p);}
功能:
private void StopPopup(object obj)
{
try
{
System.Windows.Controls.Primitives.Popup p = (System.Windows.Controls.Primitives.Popup)obj;
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
dataGrid1.DataContext = DataSetCreator.AllItems();
Thread.Sleep(1500);
p.IsOpen = false;
}));
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
但为什么这个代码被触发一次=( }
答案 0 :(得分:0)
看起来您正在尝试从非UI线程显示控件,而不是以任何方式将其连接到应用程序UI(据我所见)。需要在UI线程上创建和操作WPF UI元素,并且需要与某些基于Window的控件相关联才能进行渲染。
答案 1 :(得分:0)
除了John所说的,我还建议您查看Modeless对话框。在对话框上调用Show()时,该方法立即返回。这允许应用程序继续,而不是等待对话框的响应。您还可以附加到按钮的单击事件,以便您知道何时单击该按钮。