많은 장소를 살펴 보았지만 해결 방법을 찾지 못했습니다. 내가 성취하고자하는 것은 시간에 맞춰 BackgroundWorker를 사용할 수 있다는 것입니다. 여기에서 일어나고있는 것은 isOnline
방법 검사가 데이터베이스 (단지 예) 8 초마다에 연결하고 그에 따라 텍스트를 변경하는 경우이다타이머가있는 Backgroundworker 사용
public Main()
{
isDbAvail = new BackgroundWorker();
isDbAvail.DoWork += isOnline;
isDbAvail.RunWorkerCompleted += rewriteOnlineStatus;
}
private void rewriteOnlineStatus(object sender, RunWorkerCompletedEventArgs e)
{
Subs.Connection connection = new Subs.Connection();
changeStatus(connection.isDbAvail());
}
private void isOnline(object sender, DoWorkEventArgs e)
{
while (true)
{
Console.WriteLine("Checking database connection");
System.Threading.Thread.Sleep(8000);
}
}
public void changeStatus(bool status)
{
if (status)
{
serverStatusVal.Text = "Connected";
serverStatusVal.ForeColor = System.Drawing.Color.DarkGreen;
}
else
{
serverStatusVal.Text = "Not connected";
serverStatusVal.ForeColor = System.Drawing.Color.Red;
}
}
예를 들면 다음과 같습니다이다. 내가 알아 차 렸지만, isOnline
메서드 내의 while 루프는 무기한으로 실행되기 때문에 절대 실행하지 않는 rewriteOnlineStatus
메서드를 발생시킵니다. 이 다른 해결 방법이 있습니까?
'BackgroundWorker.ReportProgress' 체크 아웃 – Blorgbeard
8 초마다 실행되는 '타이머'를 사용하지 않는 이유는 무엇입니까? –
@yuval, 연결이 끊어지면 시간이 초과 될 때까지 데이터베이스 연결을 확인하지 않으므로 차단됩니다. – Blorgbeard