我的程序用C#編寫,並且在WPF中有一個GUI。單擊一個按鈕時,調用方法StopAndGo()
。停止方法並等待用戶輸入
問題是我想要此方法在某些點停止,等待用戶輸入,然後繼續。
我想這可以用多線程來完成,但是因爲我從來沒有研究過這個話題,所以我想確定它可以完成,並且在研究之前是否很難完成。
你能告訴我一些需要做什麼的指導嗎?
謝謝。
我的程序用C#編寫,並且在WPF中有一個GUI。單擊一個按鈕時,調用方法StopAndGo()
。停止方法並等待用戶輸入
問題是我想要此方法在某些點停止,等待用戶輸入,然後繼續。
我想這可以用多線程來完成,但是因爲我從來沒有研究過這個話題,所以我想確定它可以完成,並且在研究之前是否很難完成。
你能告訴我一些需要做什麼的指導嗎?
謝謝。
首先,我不認爲多線程是去這裏的路。如果您希望方法在特定點停止,您應該將其編碼爲顯示彈出框,文本框或任何其他區域來接收輸入。所以你需要多種方法來處理這個問題,而在主要方法中你可以調用其他方法來創建這些等待點。
對,如果你可以顯示某種類型的對話框(一個輸入框,一個自定義對話框提示你需要的數據等),那麼不需要進入線程。如果它是一個對話框,那麼你可以創建窗體,在窗體上調用ShowDialog並處理ShowDialog(DialogResult.OK,Cancel,Yes,No等,取決於你的窗體)的結果 – pstrjds 2010-11-16 19:45:05
它被稱爲'嚮導'。他們中的許多人在Visual Studio中。項目+添加新項目+報告嚮導例如。 – 2010-11-16 19:50:36
@Hans這似乎是相當的功課問題,因此我提供了指導。 – Woot4Moo 2010-11-16 19:51:07
使用ManualResetEvent類。啓動一個執行StopAndGo()的線程;裏面那個線程調用的背景下
this.manualResetEvent.WaitOne(TimeSpan.Infinite,false);
當用戶與輸入完成後,調用
this.manualResetEvent.Set();
,將讓其他線程知道該stopANdgo
之所以要進行如果方法具有背景性質,並且在該方法執行時不想鎖定用戶界面,請使用多線程。
對於等待情況,您可能需要使用同步對象,如ManualResetEvent
。
一個非常簡單的方法來做到這一點是通過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/
鏈接不起作用:( – user1069816 2015-06-12 12:10:45
更新後的鏈接:http://dean.codes/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/ – jbeanky 2015-11-06 18:12:04
如果你的代碼不能沒有用戶輸入進行,模態對話框是一個很好的避免多線程的方法。
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
當StopAndGo()正在等待用戶輸入它顯示某種提示? – pstrjds 2010-11-16 19:43:30
StopAndGo()正在等待GUI中的按鈕被點擊。 – 2010-11-16 20:51:07