You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在BackgroundWorker中修改TextBox文本,求代码问题排查

问题原因
  • 核心错误:你在连接断开的逻辑分支中创建了全新的Form1实例,这个实例没有在界面上显示,你对它调用SetText方法自然不会作用到你当前可见的窗体上。另外你的Check_Server类虽然已经定义了Form1类型的成员变量,但你完全没有使用这个成员,反而额外实例化了新的窗体对象。
  • 次要问题:MakeNewConnection方法中直接调用Thread.Sleep(10000)会卡住后台线程10秒,这段时间内BackgroundWorker无法响应取消请求,建议调整为拆分短等待的循环逻辑,避免长时间阻塞。
修复步骤
  1. 在Form1中实例化Check_Server时,把当前正在运行的窗体实例传递给Check_Server的Form1成员,示例代码如下:
// 写在Form1的代码中,例如窗体加载或者初始化BackgroundWorker的位置
Check_Server checkServer = new Check_Server();
checkServer.Form1 = this; // 将当前显示的窗体实例传入
  1. 修改Check_WebSocket方法中的调用逻辑,删除实例化新Form1的代码,直接使用传入的窗体实例:
else
{
    Console.WriteLine("not connected");
    // 删掉原有的 Form1 form = new Form1(); 代码行
    this.Form1.SetText("XYZ"); // 直接调用当前显示窗体的SetText方法
    MakeNewConnection();
}
  1. 可选优化:如果你使用的是.NET Framework 4.5及以上版本,建议使用IProgress<T>结合async/await的方案替代BackgroundWorker,逻辑更清晰,也不需要手动处理跨线程调用的Invoke逻辑。

内容的提问来源于stack exchange,提问作者user12711565

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:27:03