看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 我想用練習使用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)
loveme00835:看注意事項那邊 : http://ppt.cc/rLYq 09/10 12:12
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