。我有一个主要的应用形式称为子窗体这个代码,通过一些参数吧:ParameterizedThreadStart多参数
public ref class MyForm2 : public System::Windows::Forms::Form
{
public:
MyForm2(String^ string1, String^ string2, String^ string3, String^ string4)
{
InitializeComponent();
DoSomething(string1, string2, string3, string4);
}
//...
void DoSomething(String^ string1, String^ string2, String^ string3, String^ string4)
{
//A lot of stuff in here...
}
};
但由于DoSomething的()包含其他一些功能做长循环,也更新我的GUI控件(标签和进度条),我想移动它到一个单独的线程,所以我的GUI不会冻结。我试图用ParameterizedThreadStart来做到这一点,但似乎我无法找到一种方法来传递我的所有参数。 任何想法?提前致谢!
编辑 - 感谢evhen14!这是固定的工作代码。
public ref class ThreadParams
{
public:
String^ mystring1;
String^ mystring2;
String^ mystring3;
String^ mystring4;
ThreadParams(String^ string1, String^ string2, String^ string3, String^ string4)
{
mystring1 = string1;
mystring2 = string2;
mystring3 = string3;
mystring4= string4;
}
};
public ref class MyForm2 : public System::Windows::Forms::Form
{
public:
MyForm2(String^ mystring1, String^ mystring2, String^ mystring3, String^ mystring4)
{
InitializeComponent();
ThreadParams^ param = gcnew ThreadParams(mystring1, mystring2, mystring3, mystring4);
Thread^ newThread = gcnew Thread(gcnew ParameterizedThreadStart(this, &MyForm2::DoSomething));
newThread->Start(param);
}
//...
void DoSomething(Object^ paramObj)
{
ThreadParams^ param = (ThreadParams^)paramObj;
String^ mystring1 = param->string1;
String^ mystring2 = param->string2;
String^ mystring3 = param->string3;
String^ mystring4 = param->string4;
//A lot of stuff in here...
}
};
它需要一个对象。任何对象。包括一个有你需要的尽可能多的领域。 –