c#中用backgroundworker调用ui的textbox控件,对其赋值,有时会抛出异常。

author author     2023-02-15     251

关键词:

已设定UI的CheckForIllegalCrossThreadCalls = false;
backWorker1_DoWork中做的事情是没隔500毫秒做一些计算,然后将计算结果赋值给UI的textbox;
赋值代码如下:tbBox1Loop.Text = (loop + 1).ToString();
运行过程中有时会抛出异常,提示冲突

对控件的操作应该交给创建控件的线程去完成,先判断InvokeRequired,然后调用Invoke方法


比如:

//使用Invoke方法来设置进度条 
  
        private void RunWithInvoke()  
          
            int value = progressBar.Value;  
            while (value< progressBar.Maximum)  
              
                //如果是跨线程调用 
  
                if (InvokeRequired)  
                  
                    this.Invoke(new SetProgressBarValue(SetProgressValue), value++);  
                  
                else  
                  
                    progressBar.Value = ++value;  
                  
              
        

参考技术A 在Backgroundworker中用ReportProgress向画面交互。
将 CheckForIllegalCrossThreadCalls 设置为 true
可以在调试时更容易查找并诊断此线程活动。请注意在调试器外部启动应用程序时,非法跨线程调用将始终引发异常。
参考技术B doWork中不能直接对空间进行访问

跨线程访问空间的方请参考:
http://www.cnblogs.com/TankXiao/p/3348292.html本回答被提问者采纳
参考技术C

这句改一下,

tbBox1Loop.Invoke(new Action(delegate 
                tbBox1Loop.Text = (loop + 1).ToString();
            ));

c#关于backgroundworker的取消

我调用backgroundWorker1.RunWorkerAsync()后,在Dowork事件工作中的时候,我有一个按钮可点击,点击后调用backgroundWorker1的CancelAsync()方法,这个方法是挂起进程运行的吧,以为我再调用RunWorkerAsync()会报异常说正在工作,我该用什么方法来完全取... 查看详情

BackgroundWorker,我怎样才能显示真正的进步? C# Winforms

】BackgroundWorker,我怎样才能显示真正的进步?C#Winforms【英文标题】:BackgroundWorker,howCouldishowrealprogress?C#Winforms【发布时间】:2021-11-1615:50:28【问题描述】:我创建了使用AES加密/解密文件的应用程序,但是当我需要处理大文件时... 查看详情

如何使用 C# BackgroundWorker 报告本机 C++ 代码的进度?

】如何使用C#BackgroundWorker报告本机C++代码的进度?【英文标题】:HowtouseC#BackgroundWorkertoreportprogressinnativeC++code?【发布时间】:2012-08-1021:26:01【问题描述】:在我的VisualStudio解决方案中,我用C#实现了UI,并用原生C++实现了一些代... 查看详情

使用backgroundworker

...较差。应使用后台线程进行耗时操作,并异步更新UI。4,BackgroundWorker是WPF的一 查看详情

(C#) BackgroundWorker() ProgressChanged 不工作

】(C#)BackgroundWorker()ProgressChanged不工作【英文标题】:(C#)BackgroundWorker()ProgressChangednotworking【发布时间】:2020-05-3013:16:49【问题描述】:我有一个WPF应用程序,它由两个线程组成,模拟企业在52周内生产和销售商品(每周只允许进... 查看详情

结合 backgroundworker 和 multitread C#

】结合backgroundworker和multitreadC#【英文标题】:CombinebackgroundworkerandmultitreadC#【发布时间】:2020-11-2000:59:48【问题描述】:我有一个C#程序,它应该运行一个C++exe文件,其中包含.xlxs文件形式的几个不同输入。它看起来像这样:当Fo... 查看详情

BackgroundWorker 使用 COM 对象导致 UI 线程挂起

】BackgroundWorker使用COM对象导致UI线程挂起【英文标题】:BackgroundWorkerUsingaCOMObjectResultsinUIThreadHangup【发布时间】:2020-10-2000:09:47【问题描述】:我有一个专用类,其中包括一个BackgroundWorker,它负责从队列中运行特定于类的操作-... 查看详情

C# BackgroundWorker 的文化

】C#BackgroundWorker的文化【英文标题】:C#BackgroundWorker\'sculture【发布时间】:2010-03-0510:18:50【问题描述】:我想为我的整个应用程序设置文化。我尝试了以下方法:Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(wantedCulture);T... 查看详情

c#如何在backgroundworker后台线程中使用定时器?

就是说我有一项任务要用BackgroundWorker来进行异步操作,并且需要定时进行,由于定时时间比较短,只有1秒钟,所以不能使用System.Windows.Forms名字空间中的Timer来定时执行,因为它是主线程的定时器,每秒执行一次异步操作,会导... 查看详情

c#文本框,不同类,backgroundWorker

】c#文本框,不同类,backgroundWorker【英文标题】:c#textbox,differentclass,backgroundWorker【发布时间】:2016-12-0513:14:40【问题描述】:我是c#新手,有一个简单的项目,我有一个Form1,它有一个打开按钮Form2(诊断页面稍后将受密码保护... 查看详情

c#程序窗口假死

主要是因为UI线程被长时间的操作阻塞了。BackgroundWorker算是一种方法。如果不需要太多操作的话,还有一种更简单的方法。就是如果你在UI刷新过程中采用了长时间运算的for循环之类导致阻塞,可以试试在for中每次循环结束时,... 查看详情

c#组件之backgroundworker

这篇文章写得很好 C#BackgroundWorker详解,一步一步描述很清楚1、添加控件backgroundWorker1      组件label1、label2          用于显示过程和结果信息progressBar1           显示后台处理进度button1               ... 查看详情

c#中backgroundwork_dowork事件中的变量sender到底是啥?

privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse)//DoWork事件BackgroundWorkerworker=senderasBackgroundWorker;看有的资料说sender指向的就是该BackgroundWorker控件是什么意思?参考技术AC#里面所有的事件里面Sener都指的是引发事件的对象。比如... 查看详情

c# backgroundWorker 没有引发 ProgressChanged 或 RunWorkerCompleted 事件

】c#backgroundWorker没有引发ProgressChanged或RunWorkerCompleted事件【英文标题】:c#backgroundWorkernotraisingProgressChangedorRunWorkerCompletedevents【发布时间】:2011-08-3119:08:01【问题描述】:使用C#.NET3.5。看来我不是唯一一个,因为搜索似乎提出了... 查看详情

为啥我只能从 BackgroundWorker 访问一些 UI 控件属性?

】为啥我只能从BackgroundWorker访问一些UI控件属性?【英文标题】:WhycanIaccessonlysomeUIcontrolpropertiesfromBackgroundWorker?为什么我只能从BackgroundWorker访问一些UI控件属性?【发布时间】:2013-06-1008:07:16【问题描述】:我有一个简单的Windo... 查看详情

BackgroundWorker RunWorkerCompleted 事件

】BackgroundWorkerRunWorkerCompleted事件【英文标题】:BackgroundWorkerRunWorkerCompletedEvent【发布时间】:2011-02-1721:45:59【问题描述】:我的C#应用程序有几个后台工作人员。有时,一名后台工作人员会解雇另一名工作人员。当第一个后台工... 查看详情

C# 跨线程操作在 BackgroundWorker 中无效

】C#跨线程操作在BackgroundWorker中无效【英文标题】:C#Cross-threadoperationnotvalidinBackgroundWorker【发布时间】:2020-08-0801:48:58【问题描述】:我在加载主表单时将项目添加到列表框:privatevoidMainForm_Load(objectsender,EventArgse)Dictionary<strin... 查看详情

有哪位高手知道asp.net中用c#怎样怎样实现文件上传

有哪位高手知道ASP.NET中用C#怎样怎样实现文件上传,急。。。。。。。。。。说明:这是最基本的文件上传,在asp.net1.x中没有这个FileUpload控件,只有html的上传控件,那时候要把html控件转化为服务器控件后台代码:usingSystem;using... 查看详情