作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 vb.net,并且在我的程序中,当我运行我的后台工作程序时,我会收到此“跨线程操作无效”错误,这将使此文本框启用为真。我的主要 sub 将首先将 enabled 变为 false,当后台工作程序运行时,它将返回 true 然后退出。为什么它给我一个错误?仅供引用:还有更多代码,但我不想让它变得更加困惑......
这是堆栈跟踪:
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.OnEnabledChanged(EventArgs e)
at System.Windows.Forms.Control.set_Enabled(Boolean value)
at Helium.Form1.BackgroundWorker1_DoWork(Object sender, DoWorkEventArgs e) in C:\Users\Kevin\documents\visual studio 2010\Projects\Helium\Helium\Form1.vb:line 167
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
{"Cross-thread operation not valid: Control 'mainText' accessed from a thread other than the thread it was created on."}
最佳答案
BackgroundWorker
的目的类是在 上执行工作非图形用户界面 线程,而 GUI 保持响应。除非你设置 Control.CheckForIllegalCrossThreadCalls
至 false
(你不应该这样做),或者使用 Invoke
正如其他答案中所建议的(我也不推荐),您将收到非法的跨线程操作异常。
如果您希望与 GUI 相关的“东西”发生 而 您的 BackgroundWorker
正在运行,我通常建议使用 BackgroundWorker.ReportProgress
方法并将适当的处理程序附加到 BackgroundWorker.ProgressChanged
事件。如果您希望在 BackgroundWorker
后在 GUI 上发生某些事情是 完成 ,然后只需附加您的处理程序即可将 GUI 更新到 BackgroundWorker.RunWorkerCompleted
事件。
关于vb.net - 跨线程操作无效... - VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240702/
我是一名优秀的程序员,十分优秀!