这里我有一段代码执行:
public override void Execute(XObjectList itemList, ProcessInfo processInfo) {
ManualResetEvent syncEvent = new ManualResetEvent(false);
execute(itemList, processInfo);
//openScreen();
Thread STAThread = new Thread(() => {
var window = new Window();
window.Content = new MailViewerView();
window.Show();
syncEvent.Set();
});
STAThread.SetApartmentState(ApartmentState.STA);
STAThread.Start();
syncEvent.WaitOne();
}
我希望在最后一行之后,打开窗口并使进程本身停止,但调用execute的线程只是一次又一次地迭代。关于我做错了什么的指示?
**更新 如果我在syncEvent.WaitOne()中设置时间,则会显示后台进程的调试屏幕以及UI,但UI不可访问。对此有何帮助?
**其他信息 我想这样做,因为调用execute方法本身的线程是我无法访问的东西,我想停止该线程并显示一次迭代的UI。所以看起来好像编码不好,但这是我能想到的唯一方法来解决它。
**更新 执行以下操作时:
public override void Execute(XObjectList itemList, ProcessInfo processInfo) {
ManualResetEvent syncEvent = new ManualResetEvent(false);
execute(itemList, processInfo);
//openScreen();
Thread STAThread = new Thread(() => {
var window = new Window();
window.Content = new MailViewerView();
window.Show();
syncEvent.WaitOne();
syncEvent.Set();
});
STAThread.SetApartmentState(ApartmentState.STA);
STAThread.Start();
}
屏幕显示并且执行线程正在等待,但屏幕上没有任何内容可访问。有什么想法可以克服这一部分吗?
答案 0 :(得分:0)
所以最初的初始代码示例没有任何问题,如果我真的调用了ShowDialog(),它会完全按照预期执行,如下所示:
public override void Execute(XObjectList itemList, ProcessInfo processInfo) {
execute(itemList, processInfo);
ManualResetEvent syncEvent = new ManualResetEvent(false);
//openScreen();
Thread STAThread = new Thread(() => {
var window = new Window();
window.Content = new MailViewerView();
window.ShowDialog();
syncEvent.Set();
});
STAThread.SetApartmentState(ApartmentState.STA);
STAThread.Start();
syncEvent.WaitOne();
}