winform 界面控件更新(转)

摘要:
多个线程可能会导致对控件的访问不一致,这可能会导致问题。默认情况下,C#是线程安全的,也就是说,当访问控件时,您需要首先确定它们是否是跨线程的。如果它们是跨线程直接访问,则将在运行时引发异常。有两种解决方案:1.不要检查螺纹安全性。2.通过委托在控件的线程上执行源代码打印?

由于多线程可能导致对控件访问的不一致,导致出现问题。C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出异常。

解决办法有两个:

1、不进行线程安全的检查

2、通过委托的方式,在控件的线程上执行

publicpartialclassForm1 : Form
    {
        publicForm1()
        {
            InitializeComponent();
            //方法一:不进行跨线程安全检查
            //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }
  
        privatevoidbutton1_Click(objectsender, EventArgs e)
        {
            Thread th1 = newThread(newThreadStart(CalNum));
            th1.Start();
        }
  
        privatevoidCalNum()
        {
            //button1.Enabled = false;
  
            intresult = 0;
            for(inti = 1; i < 100000000; i++)
            {
                result += i;
            }
  
            SetCalResult(result);
  
            //button1.Enabled = true;
        }
  
        //方法二:检查是否跨线程,然后将方法加入委托,调用委托
        publicdelegatevoidSetTextHandler(intresult);
        privatevoidSetCalResult(intresult)
        {
            if(label2.InvokeRequired == true)
            {
                SetTextHandler set= newSetTextHandler(SetCalResult);//委托的方法参数应和SetCalResult一致
                label2.Invoke(set, newobject[] { result }); //此方法第二参数用于传入方法,代替形参result
            }
            else
            {
                label2.Text = result.ToString();
            }
        }
    }

免责声明:文章转载自《winform 界面控件更新(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)LoadRunner运行错误集下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#winform解析marc显示在datagridview中以及marc卡片显示

结果显示:marc显示: 卡片显示: 程序一个类: public class MARC { #region 界面上要显示的元素 public string ztm = "";//正题名 public string ftm = "";//副题名 public string fcm = "";//分册(辑)名 public string fch = "";...

【转载】Visual Studio2017如何打包发布Winform窗体程序

在用C#语言编写好Winform窗体程序后,最后一步的操作是将设计好的Winform程序代码进行打包以及发布成安装包。在Visual Studio2017开发工具中,打包发布WinForm程序是比较简单的,只需要简单的几部操作即可完成打包发布操作,此文简要介绍Visual Studio2017打包发布WinForm程序的流程。 (1)首先选中需要打包发布的...

Python中的多线程编程,线程安全与锁(一)

1.多线程编程与线程安全相关重要概念 在我的上篇博文聊聊Python中的GIL中,我们熟悉了几个特别重要的概念:GIL,线程,进程,线程安全,原子操作。 以下是简单回顾,详细介绍请直接看聊聊Python中的GIL GIL:Global Interpreter Lock,全局解释器锁。为了解决多线程之间数据完整性和状态同步的问题,设计为在任意时刻只有一个...

[WinForm] TableLayoutPanel和FlowLayoutPanel的使用

这篇文章主要跟大家分享下,在配餐系统的开发中,对tableLayoutPanel 和 flowLayoutPanel 控件的使用方法和技巧 ——后附上 测试demo, 相信需要的朋友下载看后能很快的知道其如何使用并实现一些效果和扩展应用! tableLayoutPanel: 表格布局面板,适合以表格形式规则的动态添加(显示)控件。使用方法概述:1.将 ta...

Winform开发框架之对话框样式同化

早在《Winform分页控件重大更新,并实现普通版、DotNetBar、DevExpress三大版本整合更新(附各种例子源码)》随笔中,就集成了三种界面样式的分页控件(普通版、基于DotNetBar样式和基于DevExpress样式三种),后来也就形成了我三种不同的Winform开发框架界面样式。 1)基于传统经典模式的界面,采用了OutLookBar工具...

Winform开发框架的重要特性总结

Winform开发框架的重要特性总结 从事Winform开发框架的研究和推广,也做了有几个年头了,从最初的项目雏形到目前各种重要特性的加入完善,是经过了很多项目的总结归纳和升华,有些则是根据客户需要或者应用前景的需要进行的完善,整个Winform开发框架具有很好的通用性和借鉴性,本文从该Winform开发框架进行概括总结,力求把各个重要的特性进行一些详细的...