询问者
关于跨线程问题

问题
-
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}delegate void settxt(object [] p);
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(setTxtbox));
th.Start();
}
private void setTxtbox()
{
this.Invoke(new settxt(delegate( object [] p) {
a p0 = p[0] as a;
a p1 = p[1] as a;textBox1.Text = p0.str + p1.str;
}) ,new object[] { new a("hellow"),new a("word")}
);
}
}
class a
{
public string str;
public a(string str)
{
this.str = str;
}
}//出了什么问题呢,老说参数个数匹配不一致
全部回复
-
Invoke方法的第二个参数是params object[] args,所以,你传入new object[] { new a("hellow"),new a("word")时编译器认为是你传入了两个参数,第一个是new a("hellow"),第二个是new a("word"),而delegte里面只要一个参数object [] p,这样就造成了参数个数不对。修改方式如下(这种情况编译器不会认为是两个参数):
object o = new object[] { new a("hellow"), new a("word") }; this.Invoke(new settxt(delegate(object[] p) { a p0 = p[0] as a; a p1 = p[1] as a; textBox1.Text = p0.str + p1.str; }), o);
或者直接用两个参数的形式:
delegate void settxt(a p0, a p1); this.Invoke(new settxt(delegate(a p0, a p1) { textBox1.Text = p0.str + p1.str; }), new a("hellow"), new a("word"));
-
是不是对Invoke传的参数个数,是根据我定义的delegate来传的?
Invoke方法重载,最后一个需要object数组。该数组的每一个元素应该就是你自定义委托的参数,所以:
this.Invoke(new settxt(delegate( object [] p) { a p0 = p[0] as a; a p1 = p[1] as a; textBox1.Text = p0.str + p1.str; }) ,new object[] { new object[]{new a("hellow"),new a("word")}} );
ASP.NET Forum
Other Discussion Forums
FreeRice Donate
Issues to report
Free Tech Books Search and Download