我一直在試圖解決這個問題,它似乎是一個來自.Net框架的問題。無論如何,我有一個列表視圖,其中包含5000多個項目和一個按鈕,用於對列表視圖中的所選項目進行進一步處理。現在單擊此按鈕也應該將listview的「listview.HeaderStyle」屬性設置爲「ColumnHeaderStyle.Nonclickable」。 現在當我這樣做。該程序掛起了10秒鐘,然後繼續其工作。我不知道是什麼原因導致這種情況發生。我希望你們有這個解決方案。 有什麼想法?爲什麼更改ListView的HeaderStyle會掛起應用程序?
回答
我已經找到了基本解決,現在,我需要的是設置
myListview.ColumnClick += new ColumnClickEventHandler(delegate{});
現在我不需要再更改「listview.HeaderStyle」屬性。 基本上我是從HeaderStyle
屬性禁用ColumnClick
事件,就這些。所以不要將HeaderStyle設置爲nonClickable。我只是刪除/更改事件處理程序中的函數。
您可以使用BackgroundWorker
MSDN解決此問題。
注意:即使使用此解決方案您的表單將掛起一段時間。因爲你有5000+項目要綁定到列表,這將阻止你的UI線程,因此winform將掛起。但你的listview.HeaderStyle
將被修改。
試試這個
- 在按一下按鈕,你的
listview.HeaderStyle
的PROPERT直接切換到ColumnHeaderStyle.Nonclickable
。然後撥打電話RunWorkerAsync
的BackgroundWorker
。 - 對
DoWork
事件處理程序你做了處理,並且一旦完成將數據綁定到列表視圖。爲此,您需要將以下擴展類添加到您的項目中。
擴展類
public static class ControlExtensions
{
public static void Invoke(this Control control, Action action)
{
if (control.InvokeRequired) control.Invoke(new MethodInvoker(action), null);
else action.Invoke();
}
}
使用這個你可以將數據綁定到ListView的
listview.Invoke(() => (listview.DataSource = dataSource; });
希望這對你的作品。
感謝您的想法..但它確實沒有太大區別..我只是想到另一個更簡單的解決方案,它可能不會阻止任何東西......它將Columnclick事件更改爲空函數。 – SolidSnake 2012-02-03 04:52:31
這就是想法,你在後臺線程上做所有的計算,並保持你的UI線程不受它影響。 UI線程應該只處理渲染部分,而不是理想的計算。 – 2012-02-03 04:54:47
- 1. 這個程序爲什麼會掛起?
- 2. 爲什麼我的程序掛起
- 3. 提示工作,爲什麼我的應用程序有時會「掛起」負載
- 4. log4net是否會掛起應用程序?
- 5. 這個Java應用程序爲什麼掛起/凍結?
- 6. 爲什麼我的應用程序在更新數據庫記錄時掛起?
- 7. 爲什麼執行應用程序時批處理文件有時會掛起?
- 8. 爲什麼Thread.Join()在UI線程上調用時掛起我的應用程序?
- 9. 爲什麼VS2010調試器會掛起?
- 10. WinForms應用程序掛起
- 11. NSPrintOperation掛起應用程序
- 12. Control.Invoke()掛起應用程序
- 13. 爲什麼Java進程掛起?
- 14. Uwp應用程序更改爲藍頁。爲什麼?
- 15. 爲什麼應用程序在使用子字符串方法時掛起?
- 16. 爲什麼我的應用程序在更改視圖時會凍結?
- 17. 爲什麼NodeHandle掛起?
- 18. 爲什麼semop()掛起?
- 19. 爲什麼scanner.hasNextLine()掛起?
- 20. 此遠程腳本爲什麼會導致IE6掛起?
- 21. MFMailComposeViewController掛起我的應用程序
- 22. 爲什麼用戶在我的應用程序中更改語言時android:label的文本不會更改?
- 23. 運行示例應用程序時,爲什麼Meteor/Mongo會更改數據?
- 24. StandardOutput.ReadLine()應用程序掛起使用C#
- 25. 使用SqlCeConnection.Close()掛起應用程序
- 26. Flex的文本會導致應用程序掛起
- 27. 檢測應用程序焦點更改/爲HWND更改掛接某些內容?
- 28. 爲什麼WSDL更改中斷vb.net應用程序?
- 29. 程序掛起,線程不會終止
- 30. TeamCity的掛起的更改
這並不特別讓我感到驚訝,這會造成幾秒鐘的延遲。無論何時設置屬性,該框架可能都會重新創建本機ListView控件,這需要一段時間。值得注意的是,5000+項目在ListView中有很多... – 2012-02-03 04:20:48
是否有任何解決方法? – SolidSnake 2012-02-03 04:23:28