博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winform编程中的跨线程访问资源(转)
阅读量:4679 次
发布时间:2019-06-09

本文共 1077 字,大约阅读时间需要 3 分钟。

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

首先在窗体上,创建一个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);           
        }       

    }

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

原文地址:

转载于:https://www.cnblogs.com/Maculish/archive/2011/11/21/Mac_Essay.html

你可能感兴趣的文章