2011-03-14 96 views

回答

3

即使在你做一個線程中的選取框,你仍然必須將它與主線程同步顯示,所以如果你繼續在主線程中進行冗長的數據加載,你仍然會遇到同樣的問題。因此,請將數據加載到單獨的線程中,然後將選框(以及所有其他UI元素和邏輯)留在主線程中,即它所屬的位置。開始時你不應該在主線程中進行阻塞操作。

0
HANDLE hThread; 
DWORD ThreadId; 
int Data_Of_Thread_1 = 1; 

unsigned long __stdcall ThreadFunc(void *Arg) 
{ 
    int a=0; 
    while(a != 100000000000000000) 
    { 
     a++; 
     Form1->ListBox1->Items->Add(a); 
    } 

    return 0; 
} 

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    // hThread=CreateThread(NULL,0,ThreadFunc,0,0,&ThreadId); 
    hThread = CreateThread(NULL, 0, ThreadFunc, &Data_Of_Thread_1, 0, &ThreadId); 
    if (hThread == NULL) 
    { 
     ExitProcess(Data_Of_Thread_1); 
    } 
} 

void __fastcall TForm1::Button2Click(TObject *Sender) 
{ 
    TerminateThread(hThread,ThreadId); 
} 
+0

感謝您的回覆! – 2011-06-09 02:57:41

+0

這並不安全!您不應該在線程中調用VCL方法。 – 2012-11-21 17:09:46