zoukankan      html  css  js  c++  java
  • VS2005中,C#中跨线程访问控件问题解决方案

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

    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);           

            }       

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

  • 相关阅读:
    图的存储代码实现
    最小生成树算法
    图的遍历
    图的存储结构
    ftp服务器的配置
    利用c++利用odbc连接mysql数据库
    测试odbc连接sqlsever数据库是否成功的代码
    gk888t打印机安装
    Win10下windows mobile设备中心连接不上的方法无法启动
    js千分位加逗号和四舍五入保留两位小数
  • 原文地址:https://www.cnblogs.com/wangqiideal/p/1106136.html
Copyright © 2011-2022 走看看