2010-06-10 61 views
2

我有一個奇怪的問題,我不太確定如何修復或解決問題。我正在編寫一個迷你文本編輯器風格的應用程序 - RichTextBox編輯器。在沒有Application.Idle的情況下在C#Windows窗體應用程序中檢測空閒時間

我需要在選擇更改之後進行一些複雜的解析 - 更新位置,選擇文本和有關區域周圍文本上下文的各種其他位。

由於需要一點處理,如果用戶使用箭頭鍵滾動,每次選擇更改時都不希望它被觸發。我想過使用Application.Idle,但它經常觸發。我嘗試了一個計時器,但在選擇箭頭仍在移動時可能會觸發。

我想的是一個倒數計時器排序實用程序的,將每次的RichTextBox SelectionChanged事件觸發,那麼當計時器命中500   ms或1000  毫秒它將執行復雜處理的運行復位定時器。

這聽起來像個好主意嗎?

+0

你什麼時候需要做這個處理?什麼時候被選擇或者甚至當光標位置改變時(SelectionLength == 0)? – tanascius 2010-06-10 11:54:54

回答

4

如果時間太長,您應該從自己的線程開始處理。只要你得到新的輸入,你可以停止以前的計算,並再次從新的信息開始(所以考慮你的線程取消機制)。

當你的線程完成後,你必須檢查它的結果是否有效(在此期間selecion沒有改變)。最後,您可以將計算結果「同步」到GUI,該GUI有足夠快的速度:)

只有在沒有寫入GUI的情況下才能完成一定的計算量時,這才起作用。 ..我不確定你是否可以這樣實施它。這取決於您的計算類型。

+1

不,沒什麼用處,可以在該線程中完成。它無法訪問RTB的任何屬性。 – 2010-06-10 12:57:18

+0

@Hans ...這就是爲什麼我寫道它取決於計算的類型...做例如拼寫檢查可以在一個線程中完成......當然,在錯誤的單詞上着色必須在外面完成 – tanascius 2010-06-10 13:14:37

相關問題