暂停 window 像 MessageBox.Show()
Pause a window like MessageBox.Show()
我有一种在 WPF 中实现的脚本语言,它允许用户编写多个并发操作的脚本。这些操作是使用 async/await 实现的,并且所有操作都在主线程上 运行。
我现在将步进调试器引入到该脚本语言中。目前,有一个 window 与脚本引擎关联,另一个 window 与步骤调试器关联。
我正在尝试在脚本操作执行之前停止引擎中的进程 window,同时不阻止调试器 window 上的交互。 MessageBox.Show() 非常适合这个,特别是因为它暂停了动画,这些动画本身可能会在完成时开始新的动作。
Thread.Sleep() 当然根本不起作用,因为每个人都在主线程上。
C# 中是否有类似于 MessageBox.Show() 但没有 UI 的暂停机制?我试过调用 Dispatcher.DisableProcessing(),我发誓可以暂停引擎 window,但现在我收到错误:
'Dispatcher processing has been suspended, but messages are still being processed'
我想理想情况下我想做这样的事情:
//Engine Window
private debugger;
void RunAction(ScriptAction action){
if(action.BreakPoint){
var pauserObject = PauseProcessesOnThisWindow();
debugger.break(action, pauseObject);
}
}
//Debugger Window
void Continue_Click(){
pauseObject.release();
}
如果我必须使用 MessageBox 方法,我可以看到从另一个 window 中关闭它可能很棘手,更不用说在 UI 中进行一些控制是一件很尴尬的事情调试器 window 但仍需要用户关闭引擎 window 的框。
就个人而言,我避免嵌套的消息循环。由于可重入性,它们相当危险。
我建议为您的脚本使用专用线程 window(参见 "Multiple Windows, Multiple Threads" in the WPF Threading Model documentation)。 运行 在单独的线程中单独 window 在 WPF 上比在 WinForms 上更容易。
不过,如果您确实想要一个嵌套的消息循环,您可以使用 PushFrame
.
创建一个
我有一种在 WPF 中实现的脚本语言,它允许用户编写多个并发操作的脚本。这些操作是使用 async/await 实现的,并且所有操作都在主线程上 运行。
我现在将步进调试器引入到该脚本语言中。目前,有一个 window 与脚本引擎关联,另一个 window 与步骤调试器关联。
我正在尝试在脚本操作执行之前停止引擎中的进程 window,同时不阻止调试器 window 上的交互。 MessageBox.Show() 非常适合这个,特别是因为它暂停了动画,这些动画本身可能会在完成时开始新的动作。
Thread.Sleep() 当然根本不起作用,因为每个人都在主线程上。
C# 中是否有类似于 MessageBox.Show() 但没有 UI 的暂停机制?我试过调用 Dispatcher.DisableProcessing(),我发誓可以暂停引擎 window,但现在我收到错误:
'Dispatcher processing has been suspended, but messages are still being processed'
我想理想情况下我想做这样的事情:
//Engine Window
private debugger;
void RunAction(ScriptAction action){
if(action.BreakPoint){
var pauserObject = PauseProcessesOnThisWindow();
debugger.break(action, pauseObject);
}
}
//Debugger Window
void Continue_Click(){
pauseObject.release();
}
如果我必须使用 MessageBox 方法,我可以看到从另一个 window 中关闭它可能很棘手,更不用说在 UI 中进行一些控制是一件很尴尬的事情调试器 window 但仍需要用户关闭引擎 window 的框。
就个人而言,我避免嵌套的消息循环。由于可重入性,它们相当危险。
我建议为您的脚本使用专用线程 window(参见 "Multiple Windows, Multiple Threads" in the WPF Threading Model documentation)。 运行 在单独的线程中单独 window 在 WPF 上比在 WinForms 上更容易。
不过,如果您确实想要一个嵌套的消息循环,您可以使用 PushFrame
.