我制作了一个应用程序,它可以同时运行三个背景工作者。它基本上更新了三个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