WEB开发网
开发学院软件开发C语言 我眼中委托的真正面貌(二) 阅读

我眼中委托的真正面貌(二)

 2009-05-07 08:26:49 来源:WEB开发网   
核心提示: 确定子线程创建无误,编译也通过了,我眼中委托的真正面貌(二)(6),但是,运行时却出现了这样的错误:原来,这个方法比较简单,但始终不太安全,C#中是不支持跨线程操控控件的,不过

确定子线程创建无误,编译也通过了。但是,运行时却出现了这样的错误:

原来,C#中是不支持跨线程操控控件的。不过,出于安全考虑,这样做也是合情合理,这样可以避免多个线程同时操控一个控件所带来的程序运行错误。那么,如何来实现这样的效果呢?

方法一:将 Control.CheckForIllegalCrossThreadCalls 属性设置为 false。你可以尝试给窗体添加Form_Load()事件,然后在事件函数体中对这个属性进行设置。

编译就会发现,程序已经可以顺利执行了。这个方法比较简单,但始终不太安全。所以我们不推荐这样的用法。

方法二:用委托来实现

using System.Threading;

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

        //定义委托类型
        public delegate void TreadDelgate();

        //初始化子线程对象
        private Thread demoThread = null;

        private void button1_Click(object sender, EventArgs e)
        {
            demoThread = new Thread(new ThreadStart(ThreadProcUnsafe));

            demoThread.Start();
        }

        public void ThreadProcUnsafe()
        {
            SetText();
        }
 
        private void SetText()
        {
            string text = "这个控件的内容是由子线程实现的";

            if (this.textBox1.InvokeRequired)
            {
                TreadDelgate Objdelegate = new TreadDelgate(SetText);

                this.Invoke(Objdelegate, new object[] {});
            }
            else
            {
                this.textBox1.Text = text;
            }
        }
    }
}

上一页  1 2 3 4 5 6 7 8  下一页

Tags:眼中 委托 真正

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接