我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C# 多线程更新界面的错误的解决方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C# 多线程更新界面的错误的解决方法

由于一个线程的程序,如果调用一个功能是阻塞的,那么就会影响到界面的更新,导致使用人员操作不便。所以往往会引入双线程的工作的方式,主线程负责更新界面和调度,而次线程负责做一些阻塞的工作。

这样做了之后,又会导致一个常见的问题,就是很多开发人员会在次线程里去更新界面的内容。比如下面的例子:

在上面的例子里,创建Win forms应用,然后增加下面的代码:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var thread2 = new System.Threading.Thread(WriteTextUnsafe);
            thread2.Start();
        }

        private void WriteTextUnsafe() =>
            textBox1.Text = "This text was set unsafely.";
    }
}

这里就是使用线程来直接更新界面的内容,就会导致下面的出错:

这样在调试的界面就会弹出异常,但是有一些开发人员不是去解决这个问题,而是去关闭开发工具的选项,不让弹出这个界面。或者不使用调试方式。

其实上面的代码是有问题的,我们需要把它们修改为下面这种形式:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var threadParameters = new System.Threading.ThreadStart(
                delegate { WriteTextSafe("This text was set safely."); });
            var thread2 = new System.Threading.Thread(threadParameters);
            thread2.Start();
        }

        public void WriteTextSafe(string text)
        {
            if (textBox1.InvokeRequired)
            {
                // Call this same method but append THREAD2 to the text
                Action safeWrite = delegate { WriteTextSafe($"{text} (THREAD2)"); };
                textBox1.Invoke(safeWrite);
            }
            else
                textBox1.Text = text;
        }
    }
}

这样问题,就得了解决。这里使用了委托的方式。

到此这篇关于C# 多线程更新界面的错误方法详情的文章就介绍到这了,更多相关C# 多线程更新界面的错误方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C# 多线程更新界面的错误的解决方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Win10更新后页面卡死和多任务打开错误窗口的解决方法

这篇文章给大家分享的是有关Win10更新后页面卡死和多任务打开错误窗口的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。虽然 Windows 10 October 2020(20H2)功能更新相对来说已比较
2023-06-10

Android 在其他线程中更新UI线程的解决方法

方法一:Activity.runOnUiThread(Runnable )(经验之道: 这个最好用, 凡是要刷新页面的地方,Activity.runOnUiThread( new Runnable()    { public void ru
2022-06-06

java更新时出现错误代码1603的解决方法

Java 更新过程未完成,出现一些错误:错误 1603。Java 更新未完成。原因在安装过程中会出现此错误,指示安装未完成。此错误的根本原因仍在调查之中。这是一个已知问题,我们仍在调查其根本原因。与此同时,您可以尝试执行以下操作安装 Java。选项 1:重新启
java更新时出现错误代码1603的解决方法
2019-08-26

Win8.1 Update更新出现80073712错误代码的解决方法

Windows 8.1 Update会出现安装失败,错误代码80073712;现在看上去,Win8.1 Update还有更多的错误代码。许多用户反映在安装Win8.1 Update时会出现这样的一条信息:“无法完成升级,撤销更改
2022-06-04

win10中1803更新1909错误0xc1900223的解决方法

这篇文章主要介绍了win10中1803更新1909错误0xc1900223的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。win10 1803更新1909错误0xc1
2023-06-10

Win11 KB5013943更新导致0xc0000135应用程序错误的解决方法

解决方法:1. 重新安装或修复受影响的应用程序:首先,尝试重新安装或修复出现0xc0000135错误的应用程序。可以通过控制面板的“程序和功能”部分或应用程序自身的安装程序进行操作。如果已经尝试过这一步骤,还是无法解决问题,可以考虑卸载该应
2023-08-31

Win10 20H2预览版19042.608更新错误0x80070002的解决方法

小编给大家分享一下Win10 20H2预览版19042.608更新错误0x80070002的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!10月24日,M
2023-06-10

Win8.1更新补丁提示8024402F错误的原因及解决方法

Win8.1更新补丁提示8024402F错误怎么办?目前越来越多人升级为win8.1系统,但是不少用户在Win8.1系统更新补丁出现错误8024402F,那么有什么方法可以解决这个问题吗?下面小编就给大家带来Win8.1更新补丁提示8024
2022-06-04

android studio更新gradle错误构建项目失败的解决方法

一、版本错误 对应版本,修改gradle version,和plusing version两个地方修改gradle version,和plusing version的方法有两种,一种是在 project.build。这里plusing ve
2022-06-07

win7旗舰版在线更新补丁8024402f错误原因以及解决方法

微软为了Win7系统的安全,会发布一些漏洞补丁来防止系统遭到黑客病毒的攻击。但是有些用户在 Windows Update中在线安装更新系统补丁时,遇到了错误代码8024编程客栈402f ,Windows Update未知错误的问题。面对此
2023-05-22

C++中的多线程同步问题及解决方法

C++中的多线程同步问题及解决方法多线程编程是提高程序性能和效率的一种方式,但同时也带来了一系列的同步问题。在多线程编程中,多个线程可能会同时访问和修改共享的数据资源,这可能导致数据的竞争条件、死锁、饥饿等问题。为了避免这些问题,我们需要使
2023-10-22

Win7更新失败 提示错误8024402F的解决办法

Windows7更新时有时会出现8024402F错误,导致无法正常更新。 1、点击右下角状态栏连接图标,弹出框中点击“打开网络和共享编程客栈中心&rdquwww.cppcns.como;。2、网络和共享中心中点击编程客栈&ldq
2023-06-10

dedecms更新后支付宝接口提示错误ILLEGAL_EXTERFACE的解决方法

很多编程客栈使用dedecms的用户在打过20140313补丁后,buy_action.phhttp://www.cppcns.comp被替换了,但是原先的支付宝接口无法使用了。支付宝接口提示错误ILLEGAL_EXTERFACE,具体的解
2022-06-12

Win8.1 Update更新出现错误80070020、80073712、0x800f081f问题的解决方法

上周,微软通过Windows Update向所有Win8.1平台免费推送Win8.1 Update更新。但有些用户升级并不顺利,例如出现错误代码80070020、80073712。现在,微软社区爱好者已提供有效的修复方案。 截至目前,Win
2023-06-04

Win10重置后不能更新怎么办 Win10更新提示0x8024402f错误的解决方法

Win10系统使用的时候不好了,很多用户就会选择进行重置,不过有的用户在重置后发现更新出问题,不能进行更新,而且还出现更新错误0x8024402f的提示,对于这样的情况该怎么解决呢?现在还是让小编来为大家介绍下更新错误0x8024402f的
2023-05-21

总结Android中多线程更新应用的页面信息的方式

一、runOnUiThread的用法 runOnUiThread是Activity的内部方法,使用时最好指定当前的环境变量(Context)。new Thread(new Runnable() {@Overridepublic void r
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录