這是一個Visual Studio Express C++ Windows窗體應用程序。如何在C++中停止應用程序DoEvents循環?
我想在按下「開始」按鈕之前每隔10秒在WAV播放wavPlayer中播放一個WAV文件strFileName.WAV,直到按下「停止」按鈕爲止。
當每隔10秒的時間間隔結束時,TimerEventProcessor播放WAV文件。
問題是我必須按「停止」兩次才能使其工作。第一次按「停止」似乎被忽略。
爲什麼btnStop_Click在第一次按「停止」時沒有執行?
private: System::Void bntStart_Click(System::Object^ sender, System::EventArgs^ e) {
if (String::IsNullOrEmpty(strFileName)) {
lblRunning->Text = L"Cannot Start Until File Is Loaded";
}
else {
lblRunning->Text = L"Running";
myTimer->Interval = iIntervalSeconds * 1000;
myTimer->Tick += gcnew EventHandler(TimerEventProcessor);
myTimer->Enabled = true;
while (lblRunning->Text == L"Running") {
Application::DoEvents();
}
}
}
private: System::Void btnStop_Click(System::Object^ sender, System::EventArgs^ e) {
lblRunning->Text = L"Stopped";
myTimer->Enabled = false;
wavPlayer->Stop();
}
不要使用'DoEvents'!這基本上是一個設計錯誤,僅包含向後兼容VB6,並且它不適用於表單在內部運行的方式。這是一個永遠不應該存在的黑客(但VB6不支持線程,因此它是需要的)。 – 2012-07-08 12:11:07