我的程序是用 C# 编写的,并且在 WPF 中有一个 GUI。单击一个按钮时,将StopAndGo()
调用该方法。
问题是我希望此方法在某些点停止,等待用户输入,然后继续。
我想这可以通过多线程来完成,但是由于我从未研究过该主题,因此我想在研究之前确定它可以完成,以及是否难以完成。
你能给我一些关于需要做什么的指导吗?
谢谢。
我的程序是用 C# 编写的,并且在 WPF 中有一个 GUI。单击一个按钮时,将StopAndGo()
调用该方法。
问题是我希望此方法在某些点停止,等待用户输入,然后继续。
我想这可以通过多线程来完成,但是由于我从未研究过该主题,因此我想在研究之前确定它可以完成,以及是否难以完成。
你能给我一些关于需要做什么的指导吗?
谢谢。
首先,我不认为多线程是要走的路。如果您希望该方法在某些点停止,您应该对其进行编码以显示弹出框、文本框或任何其他区域以接收输入。因此,您将需要多种方法来处理此问题,并且在 main 方法中您可以调用其他方法来创建这些等待点。
一个非常简单的方法是通过 DispatcherFrame http://www.deanchalk.me.uk/post/WPF-Modal-Controls-Via-DispatcherFrame-%28Nested-Message-Pumps%29.aspx使用嵌套消息泵
更新链接: http ://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/
使用 ManualResetEvent 类。启动一个执行 StopAndGo() 的线程;在该线程调用的上下文中
this.manualResetEvent.WaitOne(TimeSpan.Infinite,false);
当您的用户完成输入后,调用
this.manualResetEvent.Set();
这将使另一个线程知道继续 stopANDgo
当您的方法具有后台性质并且您不想在该方法执行时锁定 UI 时使用多线程的原因。
对于等待场景,您可能需要使用同步对象,例如ManualResetEvent
.
如果您的代码在没有用户输入的情况下无法继续,模式对话框是避免多线程的好方法。
DialogBox dialogBox = new DialogBox();
// Show window modally
// NOTE: Returns only when window is closed
Nullable<bool> dialogResult = dialogBox.ShowDialog();
来自https://msdn.microsoft.com/en-us/library/system.windows.window.showdialog(v=vs.110).aspx