tengfeidx的个人空间 https://bbs.21ic.com/?670183 [收藏] [复制] [RSS]

日志

C# 在线程中访问控件

已有 160 次阅读2016-12-22 10:20 |个人分类:C#|系统分类:兴趣爱好

C#  在线程中访问控件,会抛出异常
错误原因:线程间操作无效,从不是创建控件的线程访问此控件。

解决方法:
        利用方法:Control.Invoke (Delegate) 


思路:
        1、定义一个委托类型
        2、声明一个此委托类型的 变量
        3、在委托调用的方法中实现  访问控件

如下:
        1、public void delegate SetControl();
        2、public SetControl setControlDelegate;
        3、setControlDelegate = new SetControl(SetControlMethod);
        4、在线程的回调函数中,调用控件的invoke方法。
注:SetControlMethod 方法需要自己定义,里面执行对控件的操作。
例:
        向Form中添加listbox,button控件

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

        public delegate void SetControl();
        public SetControl setControlDelegate;

        public void SetControlMethod()
        {
            for (int i = 0; i < 6; i++)
            {
                listBox1.Items.Add("items " + i.ToString() + "= ");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            setControlDelegate = new SetControl(SetControlMethod);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread myThread = new Thread(ThreadFunction);
            myThread.Start();
        }

        public void ThreadFunction()
        {
            listBox1.Invoke(setControlDelegate);
        }
    }
}

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)