当前位置 : 主页 > 编程语言 > c语言 >

[WPF] Error : Parameter count mismatch (使用Dispatcher请注意)

来源:互联网 收集:自由互联 发布时间:2021-06-25
摘要:[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请注意)

网友评论