问题描述
|
这是有关从另一个线程更新UI的系列中的第二个问题。我正在尝试使用一个委托告诉UI执行更新功能(无需传递任何数据)。我在UI线程中创建了一个委托,并在UI线程之上声明了它:
delegate void MyDel();
public ref class Form1 : public System::Windows::Forms::Form
{
// .....
void testFunc()
{
this->local_long_textBox->Text = \"Test!!!!!!!\";
}
private:
void startUp()
{
MyDel^ DelInst = gcnew MyDel(this,&CotStinger::Form1::testFunc);
我想在创建时将DelInst传递给另一个线程,但是当我尝试在另一个模块的顶部将MyDel声明为这样的extern时:
extern delegate MyDel;
我得到错误:
错误C2146:语法错误:标识符\'MyDel\'
之前缺少\';\'
。
如果我尝试这个
extern delegate void MyDel();
我得到错误:
错误C2144:语法错误:\'void\'
之前应是\';\'
那么,如何获取另一个类来识别委托类型,以便可以将委托指针传递给构造函数?
解决方法
关键字“ 7”用于定义委托类型,而不是声明恰好是某种委托类型的变量。也就是说,一旦定义了委托人类型,您在任何时候都不需要
delegate
关键字。
另外,C ++ / CLI不允许使用托管类型的全局变量。通常的解决方法是将逻辑静态托管类与用作全局变量的公共静态数据成员一起使用:
delegate void MyDel();
private ref struct Globals abstract sealed
{
static MyDel^ MyDelInstance;
};
// ...
Globals::MyDelInstance = gcnew MyDel(this,&CotStinger::Form1::testFunc);
那么,如何获取另一个类来识别委托类型,以便可以将委托指针传递给构造函数?
与任何其他类型相同-将其放在一个头文件中,这两个类都可以加10。