头盔程序员 2024-02-01 17:02 采纳率: 41.2%
浏览 6
已结题

System.InvalidOperationException:“线程间操作无效: 从不是创建控件“pgBar”的线程访问它

在winform代码中通过startUpload方法开启线程,并使用委托将UploadProBar方法传递给aws对象的TestPgBar方法,然后再进行调用,但是报异常System.InvalidOperationException:“线程间操作无效: 从不是创建控件“pgBar”的线程访问它 如何解决

img

img

不想用 取消跨线程检查 这种方法解决!!希望网友给出解决方案!!

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-01 17:03
    关注

    引自免费微信小程序:皆我百晓生

    在Windows Forms应用程序中,控件只能在其创建的线程上进行操作。您遇到的错误是因为尝试从非UI线程更新进度条(pgBar)控件。为了解决这个问题,并且不使用“取消跨线程检查”(Control.CheckForIllegalCrossThreadCalls = false),您可以使用Invoke或BeginInvoke方法来安全地在UI线程上执行更新操作。

    下面是一个示例代码片段,展示如何通过委托和Invoke方法解决此问题:

    using System;
    using System.Windows.Forms;
    
    public class YourForm : Form
    {
        private ProgressBar pgBar; // 假设这是您的ProgressBar控件
    
        public void StartUpload()
        {
            Thread uploadThread = new Thread(() =>
            {
                // 模拟上传过程
                for (int i = 0; i <= 100; i++)
                {
                    // 使用Invoke确保在主线程上调用UpdateProgress方法
                    if (pgBar.InvokeRequired)
                    {
                        pgBar.Invoke(new Action<int>(UpdateProgress), i);
                    }
                    else
                    {
                        UpdateProgress(i);
                    }
    
                    // 模拟耗时操作,如:Sleep
                    Thread.Sleep(50);
                }
            });
    
            uploadThread.Start();
        }
    
        private void UpdateProgress(int value)
        {
            pgBar.Value = value;
        }
    }
    

    在这个例子中,StartUpload 方法在一个单独的线程上运行上传任务。在上传过程中,每当需要更新进度条时,它首先检查是否需要调用 Invoke,然后通过一个Action委托将 UpdateProgress 方法传递到主线程执行。这样就能确保在正确的线程上下文中更新UI控件,从而避免了线程间操作无效的异常。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度