摘要:[C#] Parameter count mismatch (dispatcher) 那天在使用dispatcher.BeginInvoke时 产生一个 Error :?Parameter count mismatch code大概如下就会出现此错误 public void FunA() { int[] Array = new int[3] { 0, 1, 2 }; Dispat
摘要:[C#] Parameter count mismatch (dispatcher)
那天在使用dispatcher.BeginInvoke时 产生一个 Error :?Parameter count mismatch
code大概如下就会出现此错误
public void FunA() { int[] Array = new int[3] { 0, 1, 2 }; Dispatcher.BeginInvoke(new FuncDelegate(Function), Array); } private delegate void FuncDelegate(int[] Array); private void Function(int[] Array) { //something... }
查了MSDN
public DispatcherOperation BeginInvoke( Delegate method, params Object[] args )
或许你就会有头绪, 主要为args这个参数... 用法并非如此使用
params?关键字可使您指定可以接受参数的方法参数,其中参数数目是可变的。 ?(sample code可以查一下MSDN好朋友XD)
很明显...解法或许就是把arrary 拆开, 一个一个放进去...
int[] Array = new int[3] { 0, 1, 2 }; Dispatcher.BeginInvoke(new FuncDelegate(Function), Array[0], Array[1], Array[2]);
但聪明点, 就用一个object变量包装整个array啰 (记得Function内的实践, 需将obj再转回 int[])
int[] Array = new int[3] { 0, 1, 2 }; object obj = Array; Dispatcher.BeginInvoke(new FuncDelegate(Function), obj);
================另外补充=================
以往C++是透过 postMessage/sendMessage去让UI进行更新
但C#中 您可采用 Dispatcher去实现 ?(要在C#采用postMessage也是可以, 就引入user32.dll)
而Dispatcher.Invoke相当于sendMessage, ?Dispatcher.BeginInvoke则相当于postMessage
任何问题或建议, 欢迎一起讨论:)
原文:大专栏 [WPF] Error : Parameter count mismatch (使用Dispatcher请注意)