当前位置:编程学习 > C#/ASP.NET >>

关于多线程操作

我编写了一个多线程类,其中有一个在线程中使用的事件,当我在窗体中使用这个事件的时候报告我错误

类代码线程部分代码如下:

public class myTr

{

        public delegate void myDel(object sender, string a);
        public event myDel myEve;

        public CustomControl1()
        {
            InitializeComponent();
        }
        private void sdd()
        {
            myDel a;
            a = new myDel(ddd);
            object[] s = new object[2];
            s[0] = this;
            s[1] = "ccccc";
            this.BeginInvoke(a,s);
        }

        private void ddd(object sender,string a)
        {
            if (myEve != null)
                myEve(sender, a);
        }


        public void runData()
        {
            Thread s = new Thread(sdd);
            s.Start();
        }

 

        public IAsyncResult BeginInvoke(Delegate method, object[] args)
        {

            method.DynamicInvoke(args);

            return null;
        }

}

 

如何实现再窗体中使用myEve事件调用Label控件的Text属性

我不要再事件中调用Lable控件的BeginInvoke方法或者Invoke方法

有人能够解决这个问题么?

 
--------------------编程问答-------------------- Control 已经有public   IAsyncResult   BeginInvoke,方法,你又写一个 BeginInvoke方法是什么意思? 另外,报什么错。 --------------------编程问答-------------------- 如1楼所说,Control已经有BeginInvoke方法了
出错是正常的,lz实现的BeginInvoke方法,根本没有把委托Post到Control的工作线程

lz不要在事件处理里面有Invoke或BeginInvoke的话,就在引发事件的地方Invoke或BeginInvoke(也就是ddd方法) --------------------编程问答-------------------- sign --------------------编程问答-------------------- 我没有使用Control 的继承,我不要Control中的方法,BeginInvoke是我做的一个外部函数。
如何把委托Post到外部的工作线程? --------------------编程问答-------------------- 那就在你的BeginInvoke方法里面调用Control.BeginInvoke方法 --------------------编程问答-------------------- 不懂你的意思,什么叫Post到外部的工作线程。。 --------------------编程问答-------------------- 如果非常不喜欢Invoke和BeginInvoke,可以用WindowsFormsSynchronizationContext --------------------编程问答-------------------- myEve(sender,   a); 就是触发委托事件了,
貌似楼主在弄异步调用,可以参照一下MSDN上面的“异步委托” --------------------编程问答-------------------- vwxyzh 朋友
能够给出WindowsFormsSynchronizationContext的用法么?
给出WindowsFormsSynchronizationContext.Current.Post()部分的就可以。
谢谢了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,