• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#中跨线程访问控件问题解决方案分享

C#中跨线程访问控件问题解决方案分享

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了问题解决方案,问题解决导学方案答案,问题解决方案模板,公司问题及解决方案,问题解决导学方案等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,推荐的解决方法是采用代理,用代理方法来间接操作不是同一线程创建的控件。

第二种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出错不敢保证Control.CheckForIllegalCrossThreadCalls = false;

最近我在做一个项目,遇到了跨线程要去访问页面控件.但是总是提示出错,不能在其它线程中修改创建控件的线程的控件的值,后来采用了匿名代理,结果很轻松地解决了.解决过程如下:
首先在窗体上,创建一个listbox,lable.

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

        private void Form1_Load(object sender, EventArgs e)
        { 
            Thread newthread = new Thread(new ThreadStart(BackgroundProcess));
            newthread.Start();        

        }

        /// <summary>
        /// 定义一个代理
        /// </summary>
        private delegate void CrossThreadOperationControl();

        private void BackgroundProcess()
        {
            // 将代理实例化为一个匿名代理
            CrossThreadOperationControl CrossDelete = delegate()         
            {           
                int i = 1;
                while (i<5)
                {
                   // 向列表框增加一个项目
                    listBox1.Items.Add("Item " + i.ToString());                  
                    i++;
                }
                label1.Text = "我在新线程里访问这个lable!";
                listBox1.Items.Add(label1.Text);
            }  ;
            listBox1.Invoke(CrossDelete);          
        }      

    }
}
</div>

希望这个小技巧能够对你的的学习和工作有所帮助.若有更好的办法来解决跨线程访问控件的问题,不防也拿出来大家分享一下.

C#跨线程访问控件运行时错误,使用MethodInvoker即可解决:

原代码:


            Thread td = new Thread(new ThreadStart(run));
            td.Start();
        }


        /// <summary>
        /// 线程方法
        /// </summary>
        private void run()
        {
            this.tslInfo.Text = "就绪";
        }
</div>
修改后:


            Thread td = new Thread(new ThreadStart(threadRun));
            td.Start();
        }


        /// <summary>
        /// 原线程方法
        /// </summary>
        private void run()
        {
            this.tslInfo.Text = "就绪";
        }

        /// <summary>
        /// 线程方法
        /// </summary>
        private void threadRun()
        {
            MethodInvoker In = new MethodInvoker(run);
            this.BeginInvoke(In);
        }
</div>
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。

      首先来看传统方法:
            InitializeCompon

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案
  • .NET企业级项目中遇到的国际化问题和解决方法
  • C#中跨线程访问控件问题解决方案分享

相关文章

  • 2017-05-28轻松学习C#的预定义数据类型
  • 2017-05-28C#实现软件监控外部程序运行状态的方法
  • 2017-05-28WPF 自定义雷达图开发实例教程
  • 2017-05-28C# 解析 Excel 并且生成 Csv 文件代码分析
  • 2017-05-28C#实现根据字节数截取字符串并加上省略号的方法
  • 2017-05-28C#中子类调用父类的实现方法
  • 2017-05-28C#获取全部目录和文件的简单实例
  • 2017-05-28C#实现将商品金额小写转换成大写的方法
  • 2017-05-28利用C#如何给PDF文档添加文本与图片页眉
  • 2017-05-28WinForm调用jar包的方法分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#控制图像旋转和翻转的方法
    • 用Newtonsoft将json串转为对象的方法(详解)
    • C#通过经纬度计算2个点之间距离的实现代码
    • c#获取季度时间实例代码(季度的第一天)
    • 详谈.net中的垃圾回收机制
    • webBrowser执行js的方法,并返回值,c#后台取值的实现
    • 关于finalize机制和引用、引用队列的用法详解
    • C#实现闪动托盘图标效果的方法
    • 关于c#二叉树的实现
    • C#使用正则表达式抓取网站信息示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有