我製作了一個應用程序,它可以同時運行三個背景工作者。它基本上更新了三個datagridviews,它正在做的事情。我的問題是,如果我按下最大化按鈕或任何datagridview程序掛起相當長的時間。我能夠使用水平滾動而不是垂直滾動。我已經嘗試過Backgroundworker_runworkercompleted,並且在線程更新了各自的datagridviews之後,它會根據需要觸發。這是一種正常行爲還是我做錯了任何建議都會有幫助。 P.S:我已經使用step方法運行了整個程序,它們在代碼中沒有無限循環。 在此先感謝 Jhon使用backgroundworkers更新datagridviews後GUI凍結
0
A
回答
0
這聽起來像你仍然阻止UI線程莫名其妙。您可能會發布一些代碼片段。另外,您的流程的CPU利用率是多少?如果CPU使用率很高,您可能會以某種方式匱乏UI線程。
0
好的我找到了解決問題的方法,同時逐步消除了感知故障點,我在backgroundworker.dowork事件之外調用了datagridview,並解決了問題。 故事的道德「不要從後臺線程更新數據網格視圖」特別是當你不知道你在做什麼錯誤:)。我希望它能在未來幫助別人。
2
當您調用Backgroundworker1.RunWorkerAsync()
暫時禁用您的datagridview滾動條時,請放置此行代碼。
DataGridView1.ScrollBars = ScrollBars.None
現在加入這行代碼在BackgroundWorker1_RunWorkerCompleted
事件重新啓用您的datagridview滾動條。
DataGridView1.ScrollBars = ScrollBars.Both
這絕不會使您的應用程序無法響應。
0
您必須確保您正在從UI線程更新datagridviews。
0
我有同樣的問題。當我的dataGridViews從UI線程更新時,他們工作得很好。當我試圖從backgroundWorker向它們添加一系列行時,它們變得沒有響應。
要解決這個問題,我將行添加到了dataTable中。當我啓動backgroundWorker時,我將dataGridView的.datasource屬性設置爲空。當工作人員完成時,我再次將其設置回dataTable。這既強制dataGridView自行更新,也切斷工作線程中發生的事件與UI中正在顯示的內容之間的同步連接,這似乎減輕了worker完成時的無響應。
使用範例:
Private Sub button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
If bgWorker1.IsBusy <> True Then
dataGridView1.DataSource = Nothing
bgWorker1.RunWorkerAsync()
End If
End Sub
Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bgWorker1.DoWork
dataTable1.Rows.Add("data")
End Sub
Private Sub bgWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As RunWorkerCompletedEventArgs) Handles bgWorker1.RunWorkerCompleted
dataGridView1.DataSource = dataTable1
dataGridView1.Refresh()
End Sub
相關問題
- 1. GUI凍結,而我更新我的ObservableCollection
- 2. Powershell:凍結GUI
- 3. Tkinter GUI凍結
- 4. QProcess凍結GUI
- 5. scypy.signal.decimate()凍結GUI
- 6. FireDac凍結GUI
- 7. urllib2凍結GUI
- 8. GUI凍結 - Perl Tk
- 9. 任務凍結GUI
- 10. GUI凍結和多
- 11. Android Handler凍結GUI
- 12. QProcess GUI不凍結
- 13. WatchService凍結JavaFX GUI
- 14. 點擊按鈕後GUI凍結
- 15. Android Studio凍結後更新至2.0
- 16. 更新後的Pycharm凍結v5.0.1
- 17. GUI凍結當我使用「獲得」
- 18. c - GTK3.0使用「g_spawn_async_with_pipes()」時,GUI會凍結「
- 19. 如何防止使用QThread凍結GUI?
- 20. Java Swing GUI重新聚焦時凍結
- 21. C#GUI凍結當更新標籤通過定時器
- 22. 線程更新GUI在隨機時刻凍結
- 23. 使用後臺結果更新(大量)GUI項目線程
- 24. Android Java GUI凍結/ w ProgressBar
- 25. ThreadPool導致GUI凍結(?)
- 26. 如何避免GUI凍結?
- 27. GUI凍結而Dispatcher.BeginInvoke或Task.StartNew
- 28. 線程完全凍結GUI
- 29. Python PyQt4 progressbar凍結GUI
- 30. 的Java Swing GUI凍結
能否請您給我們,爲什麼我們不能從更新的backgroundworker.Dowork DataGridView中原因是什麼? 我也面臨同樣的問題,所以我將datagridview滾動條設置爲none,當datagridview完全更新時,我再次在backgroundworker.runworkercompleted事件中將滾動條設置爲兩者。 – 2014-07-16 11:40:46