因此,我有一個餐廳的Windows窗體應用程序,我有一個表選擇模塊,它至少會被使用4名服務員。如何在沒有「功能評估需要所有線程運行」的情況下調用背景中的方法
這是有道理的,我需要Sync
當表被設置佔用的軟件。我的方法叫做RefreshApp
,至少可以滿足我的需求,就像一種魅力。該問題存在於,它只能在這裏成功叫:
private void loadTables() { // Some load tables code... RefreshApp(); }
把方法在這裏,它將完美運行,只需1次......這就是我的問題,我需要刷新每過一段時間,所以我想在一個BackgroundWorker:
private void bgWorker_DoWork(object sender, DoWorkEventArgs e) { while (true) { Thread.Sleep(100); if (_stopwatch.Elapsed >= TimeSpan.FromSeconds(Constants.refreshTime) && Constants.alreadyWorking == false) { Constants.alreadyWorking = true; RefreshApp(); // Restart the stopwatch for next sync event _stopwatch.Restart(); } }
但是,如果我運行的代碼在那裏我得到「的功能評價,需要所有的線程來運行」,如果我用的是鱈魚e在Button_click方法中手動測試它,它給了我同樣的錯誤。
private void btn_Refresh_Click(object sender, EventArgs e) { RefreshApp(); }
所以我的問題是,我怎樣才能調用RefreshApp
方法在一定的背景時間沒有這種錯誤的?
這裏是(請記住:在需要這種方法已經工作),以供參考代碼:
private void RefreshApp() { SqlDataReader reader = sqlCommandGetTables.ExecuteReader(); // foreach PictureBox representation of a table, get db value, compare, assign table state foreach (PictureBox item in from d in group_Layout.Controls.OfType<PictureBox>().Reverse() select d) { if (item.Name == "DMPS_Layout") continue; reader.Read(); //if the item.Text property equals database value [mesa1], assign image if (item.Text == reader.GetSqlValue(1).ToString() && Int32.Parse(reader.GetValue(0).ToString()) == Constants.numMesaEmpty) item.Image = Properties.Resources.mesaEmpty; if (item.Text == reader.GetSqlValue(1).ToString() && Int32.Parse(reader.GetValue(0).ToString()) == Constants.numMesaBusy) item.Image = Properties.Resources.mesaBusy; if (item.Text == reader.GetSqlValue(1).ToString() && Int32.Parse(reader.GetValue(0).ToString()) == Constants.numMesaUnavailable) item.Image = Properties.Resources.mesaUnavailable; } }
只有在調試和斷點時纔得到該錯誤消息嗎? –
是的,我只能在調試時看到這個錯誤,但是當錯誤發生時代碼不能正確執行。 –
錯誤是**,因爲你處於斷點**。你能告訴我們關於使你添加斷點的症狀嗎?即。是什麼促使你調試這段代碼。 –