C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 使用BeginInvoke时的参数计数不匹配异常大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_675_4@ 我在C .NET表单应用程序中有一个后台工作程序,它运行异步.在这后台工作者的DoWork函数中,我想向datagridview添加行,但是我无法弄清楚如何使用BeginInvoke执行此操作,因为我的代码似乎不起作用.

我的代码

delegate void invokeDelegate(array<String^>^row);

....
In the DoWork of the BACkgroundworker
....

array<String^>^row = gcnew array<String^>{"Test","Test","Test"};
if(ovlgrid->Invokerequired)
    ovlgrid->BeginInvoke(gcnew invokeDelegate( this,&Form1::AddRow),row);

....

void AddRow(array<String^>^row)
{
 ovlgrid->Rows->Add( row );
}

我得到的错误是:

当我更改为代码以不传递任何参数它只是工作,代码而不是:

delegate void invokeDelegate();

...
In the DoWork function
...

if(ovlgrid->Invokerequired)
     ovlgrid->BeginInvoke(gcnew invokeDelegate( this,&Form1::AddRow));

...
void AddRow()
{
     array<String^>^row = gcnew array<String^>{"test","test2","test3"};
     ovlgrid->Rows->Add( row );
}

但问题是我想传递参数.
我想知道我做错了什么导致了parametercountexception以及如何解决这个问题?

解决方法

你遇到的问题是 BeginInvoke takes an array of parameters,你传递一个恰好是一个参数的数组.

因此,BeginInvoke认为这意味着您有3个字符串参数:“test”,“test2”和“test3”.您需要传递一个只包含您的行的数组:

array<Object^>^ parms = gcnew array<Object^> { row };
ovlgrid.beginInvoke(gcnew invokeDelegate(this,parms);
@H_450_38@

大佬总结

以上是大佬教程为你收集整理的c – 使用BeginInvoke时的参数计数不匹配异常全部内容,希望文章能够帮你解决c – 使用BeginInvoke时的参数计数不匹配异常所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。