vb.net - 跨线程操作无效... - VB.NET

标签 vb.net visual-studio-2010 multithreading

我正在使用 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.CheckForIllegalCrossThreadCallsfalse (你不应该这样做),或者使用 Invoke正如其他答案中所建议的(我也不推荐),您将收到非法的跨线程操作异常。

如果您希望与 GUI 相关的“东西”发生 您的 BackgroundWorker正在运行,我通常建议使用 BackgroundWorker.ReportProgress方法并将适当的处理程序附加到 BackgroundWorker.ProgressChanged事件。如果您希望在 BackgroundWorker 后在 GUI 上发生某些事情是 完成 ,然后只需附加您的处理程序即可将 GUI 更新到 BackgroundWorker.RunWorkerCompleted事件。

关于vb.net - 跨线程操作无效... - VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240702/

相关文章:

c++ - include "file.h"vs <file> 有什么区别?

c# - 为什么我的 C# 应用程序在多线程单元上运行?

python - 运行时错误 : There is no current event loop in thread 'Thread-7' . 与 discord.py

vb.net - LINQ 中的 ArrayList 问题

c++ - 访问多维数组元素c++

javascript - 在回发时保持 div 可见

java - 使用 Java 多线程实现交通信号

c++ - boost 线程同步

c# - 如何查看特定字符串的文本文件并将该字符串粘贴到 SSIS/C#/VB 中的变量中

sql-server - 在 SQL Server 中插入后获取 ID