作者cloudlim (Oswin)
看板C_and_CPP
標題[問題] VC++2008的backgroundWorker
時間Fri Sep 10 01:28:07 2010
遇到的問題: (題意請描述清楚)
我想用練習使用backgroundWorker
我把想用子thread做的事情寫在DoWork裡
然後在button的click裡叫它run
但是它不理我
一點反應都沒有 毫無動靜 囧
是因為沒加please不夠禮貌嗎......
自婊好爛的梗 Orz"
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
VC++ 2008
有問題的code: (請善用置底文標色功能)
// button1 for calling thread run
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e) {
backgroundWorker1->RunWorkerAsync();
}
// backgroundWorker
private: System::Void backgroundWorker1_DoWork(System::Object^ sender,
System::ComponentModel::DoWorkEventArgs^ e) {
int i = 0;
while(1)
{
i ++;
label1->Text = i.ToString("e");
}
}
}
// button2 for calling thread canceled
private: System::Void button2_Click(System::Object^ sender,
System::EventArgs^ e) {
backgroundWorker1->CancelAsync();
}
=======================回應loveme大的分隔線=========================
loveme大, 請問您說的是這段嗎?
this->backgroundWorker1->DoWork += gcnew System::ComponentModel::\
DoWorkEventHandler(this,&Form1::backgroundWorker1_DoWork);
我是用win form designer拉元件進去
這段是designer自動生成的
補充說明:
先謝謝說明的高手了
感激 ^^"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.167.129.3
→ loveme00835:有沒為你的backgroundWorker1新增DoWorkEventHandler 09/10 03:22
→ loveme00835:委派? 09/10 03:22
※ 編輯: cloudlim 來自: 122.116.113.12 (09/10 10:54)
→ cloudlim:唔...請問一下 意思是因為我在DoWork裡處理label的關係? 09/10 13:30
→ cloudlim:所以我應該要把要做的事情寫成一個function, 然後再在 09/10 13:31
→ cloudlim:DoWork裡call那個function? 09/10 13:31
→ loveme00835:範例中是用 ProgressChangedEvent 來通知別的 handler 09/10 13:35
→ loveme00835:完成改變 UI 物件的動作 09/10 13:37
→ cloudlim:喔喔 對喔 因為不能直接跨thread操作物件嗎? 09/10 15:03
→ loveme00835:BackgroundWorker沒用過所以我不太清楚他的handler是 09/10 15:19
→ loveme00835:由哪些執行緒在跑, 不過timer、Thread都是不能直接存 09/10 15:19
→ loveme00835:取 UI 物件的 09/10 15:19
→ cloudlim:喔喔~瞭改了 感激唷 再來去試試看.. 09/10 22:25