2010-11-16 61 views
3

我的程序用C#編寫,並且在WPF中有一個GUI。單擊一個按鈕時,調用方法StopAndGo()停止方法並等待用戶輸入

問題是我想要此方法在某些點停止,等待用戶輸入,然後繼續。

我想這可以用多線程來完成,但是因爲我從來沒有研究過這個話題,所以我想確定它可以完成,並且在研究之前是否很難完成。

你能告訴我一些需要做什麼的指導嗎?

謝謝。

+0

當StopAndGo()正在等待用戶輸入它顯示某種提示? – pstrjds 2010-11-16 19:43:30

+0

StopAndGo()正在等待GUI中的按鈕被點擊。 – 2010-11-16 20:51:07

回答

3

首先,我不認爲多線程是去這裏的路。如果您希望方法在特定點停止,您應該將其編碼爲顯示彈出框,文本框或任何其他區域來接收輸入。所以你需要多種方法來處理這個問題,而在主要方法中你可以調用其他方法來創建這些等待點。

+1

對,如果你可以顯示某種類型的對話框(一個輸入框,一個自定義對話框提示你需要的數據等),那麼不需要進入線程。如果它是一個對話框,那麼你可以創建窗體,在窗體上調用ShowDialog並處理ShowDialog(DialogResult.OK,Cancel,Yes,No等,取決於你的窗體)的結果 – pstrjds 2010-11-16 19:45:05

+0

它被稱爲'嚮導'。他們中的許多人在Visual Studio中。項目+添加新項目+報告嚮導例如。 – 2010-11-16 19:50:36

+0

@Hans這似乎是相當的功課問題,因此我提供了指導。 – Woot4Moo 2010-11-16 19:51:07

0

使用ManualResetEvent類。啓動一個執行StopAndGo()的線程;裏面那個線程調用的背景下

this.manualResetEvent.WaitOne(TimeSpan.Infinite,false); 

當用戶與輸入完成後,調用

this.manualResetEvent.Set(); 

,將讓其他線程知道該stopANdgo

+0

你不想要WaitOne(0,false)。如果WaitOne的超時時間爲零,它將立即返回並告訴您是否已設置句柄,但不會阻止。 – pstrjds 2010-11-16 19:48:50

+0

你是對的..糾正了代碼。 – dexter 2010-11-16 19:54:08

0

之所以要進行如果方法具有背景性質,並且在該方法執行時不想鎖定用戶界面,請使用多線程。

對於等待情況,您可能需要使用同步對象,如ManualResetEvent

3
+0

鏈接不起作用:( – user1069816 2015-06-12 12:10:45

+0

更新後的鏈接:http://dean.codes/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/ – jbeanky 2015-11-06 18:12:04