그래서 테이블 선택 모듈을 가지고있는이 Windows Form 응용 프로그램을 가지고 적어도 적어도 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(); } }
하지만이 코드를 실행하면 내가 대구를 사용하는 경우 I는 "기능 평가가 실행하는 모든 스레드가 필요합니다"얻고, 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; } }
디버깅 할 때와 중단 점에서만 오류 메시지가 표시됩니까? –
예, 실제로 디버깅 할 때만이 오류가 표시되지만 오류가 발생하면 코드가 올바르게 실행되지 않습니다. –
중단 점 **에 있기 때문에 오류가 발생했습니다. 중단 점을 추가 한 증상에 대해 알려주실 수 있습니까? 즉. 이 코드를 디버깅하라는 메시지는 무엇입니까? –