使用委托从后台任务更新 UI
updating UI from background task using delegate
我正在尝试从后台线程更新标签值。我知道有几个例子,但我仍然无法理解为什么下面的代码会引发堆栈溢出错误。似乎每次执行 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[]);
谢谢
好吧,因为这个:
d->Invoke(data);
看,这里你叫Delegate::Invoke
,这基本上意味着setTitle
会立即调用自己。您需要改为调用Control::Invoke
,因此您需要在Control
的实例上调用它,如下所示:
this->lastSeen1->Invoke(d, /* any args here */);
我不知道你为什么要在这里传递一个char[]
,最好不要过多地混合本机和托管数据结构,如果你可以使用String^
来代替(但即便如此,C++/CLI 也不是真正用于 UI 开发......
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 有没有任务栏API可以立即应用注册表更改
- 如何在执行异步后台任务的C++中构造对象
- 使用委托从后台任务更新 UI
- 在执行后台任务时与Objective-C中的GUI交互
- 在后台阅读文件以更新QJSONVALUE
- 在Qt中从后台更新UI(QtConcurrent)
- 运行后台"algrothim"更新小部件Qt的最佳方式
- Qt 界面在后台任务上冻结
- c++跨平台后台任务
- 如何在后台进程上处理来自Windows任务管理器的"End Task"?
- Libssh2:防止后台任务被杀死
- 如何从c++后台任务(Windows通用应用程序)调用c#函数
- c++后台更新
- 在WinRT中从异步任务lambda更新UI
- 非常资源密集的Windows Phone 8后台任务