我的程序是用C#编写的,并且在WPF中有一个GUI。单击一个按钮时,将调用方法StopAndGo()
。
问题是我希望此方法在某些点停止,等待用户输入,然后继续。
我想这可以通过多线程来完成,但由于我从未研究过这个主题,我想确保它可以完成,并且在研究它之前是否很难完成。
你能否就需要做什么给我一些指导?
感谢。
答案 0 :(得分:3)
首先,我不认为多线程是这里的方式。如果希望方法在某些点停止,则应对其进行编码,以显示弹出框,文本框或任何其他区域以接收输入。所以你需要多种方法来处理这个问题,在main方法中你可以调用其他方法来创建这些等待点。
答案 1 :(得分:3)
一种非常简单的方法是通过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/
答案 2 :(得分:0)
使用ManualResetEvent类。启动一个执行StopAndGo()的线程;在该线程调用的上下文内部
this.manualResetEvent.WaitOne(TimeSpan.Infinite,false);
当您的用户完成输入后,请致电
this.manualResetEvent.Set();
将让其他线程知道继续使用stopANdgo
答案 3 :(得分:0)
当您的方法具有背景特性时,使用多线程的原因,并且您不希望在该方法执行时锁定UI。
对于等待场景,您可能需要使用同步对象,例如ManualResetEvent
。
答案 4 :(得分:0)
如果您的代码无法在没有用户输入的情况下继续进行,则模态对话框是避免多个线程的好方法。
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