我已经写了一个WordAddIn,它允许用户调用当前文档的某些元数据。通过功能区中的自定义按钮,他们可以调用WPF。WPF调用实现如下:
System.Windows.Application app = null;
然后在按钮调用的方法中:
if (app == null)
{
app = new System.Windows.Application { ShutdownMode = ShutdownMode.OnExplicitShutdown };
app.Run();
}
MainWindow win = new MainWindow(graph);
app.Dispatcher.Invoke((Action)(() => { win.Show(); }));
Word启动后第一次单击该按钮时,没有任何反应,并且无法编辑Word文档中的内容。第二次单击该按钮并显示WPF对象,这对于以后的任何按钮单击也适用。因此,似乎是第一次调用调度程序时,它挂起了。我该如何预防?
我在Microsoft WPF论坛中获得了有关此方面的帮助。在新线程中创建和调用app可以解决问题,因为app确实确实阻止了当前被调用的线程。
if (app == null)
{
Thread thread = new Thread(new ThreadStart(() =>
{
app = new System.Windows.Application { ShutdownMode = ShutdownMode.OnExplicitShutdown };
autoResetEvent.Set();
app.Run();
}));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
else
{
autoResetEvent.Set();
}
autoResetEvent.WaitOne(); //wait until app has been initialized on the other thread
app.Dispatcher.Invoke((Action)(() => { new MainWindow(graph).Show(); }));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句