关于多线程操作
我编写了一个多线程类,其中有一个在线程中使用的事件,当我在窗体中使用这个事件的时候报告我错误类代码线程部分代码如下:
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#