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

这篇文章主要介绍了C#中跨线程访问控件问题解决方案,有需要的朋友可以参考一下

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

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

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

        }

        ///


        /// 定义一个代理
        ///

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

    }
}

以上就是C#中跨线程访问控件问题解决方案分享的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他教程