参数计数不匹配。是哪里错了呀 顶上 public partial class Form1 : Form { public delegate void WorkHandler(int x); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那就是与你 定义的WorkHandler 中的参数数量不一致,检查是不是少传入参数了。 这么复杂,直接progressBar1.Value=i;不行吗 如果要显示百分比,建议使用backgroundworker,参见:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(v=vs.110).aspx 哦,在线程里不可以直接访问UI控件改成这样 for (int i = 0; i < 100; i++) { Thread.Sleep(100); this.Invoke(new Action<int>(this.UpdateProgress), i); } private void UpdateProgress(int v) { this.progressBar1.Value = v; } 定义的里只有传入一个参数的呀这个提示是说Invoke函数参数不匹配,因为托管代理定义了一个参数,所以Invove函数要指定第二个参数this.Invoke(托管对象,第二个参数); //第二个参数实际就是托管对象的参数 Quote: 引用 6 楼 gxingmin 的回复:哦,在线程里不可以直接访问UI控件改成这样 for (int i = 0; i < 100; i++) { Thread.Sleep(100); this.Invoke(new Action<int>(this.UpdateProgress), i); }在线程里是不可以直接访问UI控件,用了lambda其实也相当于是委托访问的吧。不传参的 直接progressBar1.Value = i是可以的 但是我就是不明白放个传个参数为什么就不对了 定义的里只有传入一个参数的呀这个提示是说Invoke函数参数不匹配,因为托管代理定义了一个参数,所以Invove函数要指定第二个参数this.Invoke(托管对象,第二个参数); //第二个参数实际就是托管对象的参数ok 已明白 progressBar1.Invoke(new WorkHandler((x) => { x = i; progressBar1.Value = x; }),i); 而且你的x=i;这个语句是完全没有道理的x是你自己定义的,i是从哪来的?i并不是一个全局变量,你需要把它传递给x所以应该是Invork(lamada,i)这样传递进去而不是在函数体里面使用i (x) => { x = i; progressBar1.Value = x; }不要把这个东东想象的太神奇它不过就是个语法糖,相当于void f(int x){progressBar1.Value = x;}而已你不要在f这个函数里直接使用i啊 恩 知道啦 progressBar1.Invoke(new WorkHandler((x) => { x = i; progressBar1.Value = x; }),i); 这样就对了 多次改变button的text属性 关于用socket在服务端与客户端建立连接 C#怎么保存图片啊??????????? C# 焦点问题 高手进啊,问一个问题 怎么样引用Lucene.Net中的数据包? 给我点代码实现用olecommand来添加删除数据库纪录 初级,怎么调用方法类????????? 程序闪退问题 Thread.Abort() 关闭线程问题 请问哪位弟兄知道地磅接收的数据如何解码的问题 C#label控件怎么加到矢量图的某个位置,一起放大缩小
改成这样
for (int i = 0; i < 100; i++) { Thread.Sleep(100);
this.Invoke(new Action<int>(this.UpdateProgress), i);
} private void UpdateProgress(int v) { this.progressBar1.Value = v; }
这个提示是说Invoke函数参数不匹配,因为托管代理定义了一个参数,所以Invove函数要指定第二个参数this.Invoke(托管对象,第二个参数); //第二个参数实际就是托管对象的参数
这个提示是说Invoke函数参数不匹配,因为托管代理定义了一个参数,所以Invove函数要指定第二个参数this.Invoke(托管对象,第二个参数); //第二个参数实际就是托管对象的参数
ok 已明白
progressBar1.Invoke(new WorkHandler((x) => { x = i; progressBar1.Value = x; }),i);
x是你自己定义的,i是从哪来的?
i并不是一个全局变量,你需要把它传递给x
所以应该是Invork(lamada,i)这样传递进去
而不是在函数体里面使用i
它不过就是个语法糖,相当于
void f(int x)
{
progressBar1.Value = x;
}
而已
你不要在f这个函数里直接使用i啊
恩 知道啦 progressBar1.Invoke(new WorkHandler((x) => { x = i; progressBar1.Value = x; }),i); 这样就对了