我正在使用 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/