我试图从后台线程更新标签值。我知道有几个例子,但我仍然无法理解为什么下面的代码会引发堆栈溢出错误。似乎每次执行setTitle()时它都会通过if语句的真实部分。
设置标题功能:
void setTitle(char data[])
{
String^ temp = gcnew String(data);
if(this->lastSeen1->InvokeRequired)
{
setTitleDelegate^ d = gcnew setTitleDelegate(this, &setTitle);
d->Invoke(data);
}else
{
this->lastSeen1->Text = temp;
this->lastSeen1->Visible = true;
}
}
委托:
delegate void setTitleDelegate(char data[]);
谢谢
答案 0 :(得分:1)
好吧,因为这个:
d->Invoke(data);
请注意,此处您正在调用Delegate::Invoke
,这基本上意味着setTitle
只是立即调用自己。您需要调用Control::Invoke
,因此您需要在Control
的实例上调用它,如下所示:
this->lastSeen1->Invoke(d, /* any args here */);
我不知道你为什么要在这里传递char[]
,最好不要过多地混合本机和托管数据结构,如果你可以只使用{{相反(但即使这样,C ++ / CLI也不是真正意义上的UI开发......)。