簡體   English   中英

是否可以將窗體控件放在其自己的線程上?

[英]Is it possible to put a form control on its own thread?

我正在使用DataGridView,並且某些操作確實使它在一段時間內變得無響應。 通常,我會將數據處理放在其自己的線程中以使表單更具響應性,但是在這種情況下,DataGridView本身花費了很長時間。

這使我想知道是否可以在一個線程上使用主窗體,而在另一個線程上使用DataGridView,這樣就不會阻止主窗體響應。

我完全理解,這樣做可能不是“安全的”,並且可能會打開一罐蠕蟲,這使得它幾乎不值得嘗試,我完全希望這篇帖子因僅僅提出這樣一個荒謬的想法而會被否決。

這可能嗎? 如果是這樣,您將如何處理?

編輯:我想出了如何解決手頭的問題。 簡短的答案是在設置RowCount時使用標志,以便CellValueNeeded()可以立即紓困。 故事還有很多,我已經做過一部分,但這就是要點。

簡短的答案是否定的,因為該控件需要與其他控件(或至少是窗口)進行交互,並且它們都必須位於同一線程上。

這樣做似乎意味着您正在UI線程上進行處理,這本身也是一個很大的禁忌。 您應該在自己的線程上運行所有主要進程 ,然后保存UI線程的最終演示文稿 -在一個線程上工作,在另一個線程上進行屏幕更新。

在給定的應用程序中絕對可能有多個UI線程。 但是,不可能將來自不同線程的UI組件組合到同一Form上。 對於給定的形式,所有組件都必須在同一線程上

解決此問題的最佳方法是將數據處理本身移到單獨的線程上。 僅執行絕對最小值以從UI線程更新UI。 那應該有助於響應

了解網格中虛擬化的使用。

並請提供代碼示例以了解操作花費的時間太長!

否,但是從dataGridView觸發的事件中,您可以發送一個worker來執行異步任務,然后使用來自worker線程的控件Invoke方法來更新dataGridView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM