0
在C++ DLL中使用表單只是爲了說明。我想象的那樣,我需要它有相同的變量作爲應用程序有這將是重要的(這可能會或可能不會有所不同)已重載的啓動類線程的例程函數C++
開始我的表單我必須這樣做:
Form1^ThisForm = gcnew Form1;
Application::Run(ThisForm);
這是基本沒有困難的。我的表單在使用時可以正常工作。現在我想通過Form1(ThisForm)創建一個線程。他們在這裏定義:
public:
VOID WINAPI MainThread2();
而且它所做的就是設置標籤內這對當前時間:
VOID Form1::MainThread2()
{
while (true)
{
Beep(400, 100);
time_t CurrentTime = time(0);
struct tm* TimeStruct = localtime(&CurrentTime);
string str = to_string(TimeStruct->tm_hour) + ":" + to_string(TimeStruct->tm_min) + ":" + to_string(TimeStruct->tm_sec);
String^ timestring = gcnew String(str.c_str());
this->label1->Text = "hello";
}
}
但很明顯我不能創建這個線程:
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThisForm->MainThread2, NULL, NULL, NULL);
由於這個錯誤:
error C2440: 'type cast': cannot convert from 'overloaded-function' to 'LPTHREAD_START_ROUTINE'
我怎麼會設法通過THISFORM
我試圖做到這一點: 線程^ newThread ----但在更新任何標籤的等沒有按在線程內不工作 – Reece
這不會通過切換到用於啓動線程的非託管API來改變。有幾種從UI線程以外的線程更新WinForms API的技術,我相信你可以通過搜索StackOverflow找到它們。 –