GUI 업데이트 여기에 하나의 네트워크 관련 작업을 수행 할 복수 backgroundworker
s 사용하고 있습니다. 기본적으로 해당 사용자를 확인하는 프로세스가 내 페이지에 등록되어 있지 여부. 확인하려면 거의 1000 개의 계정을 가지고 있으므로 사용자를 가져오고 용도를 확인하기 위해 동일한 사용자 이름을 가져 오는 데 datagridview
을 사용하고 있습니다. 내 코드가 잘 작동하고 결과를 표시하지만 문제는 datagridview
상태를 업데이트 할 때 그다지 효과적이지 않습니다. 그 긴 프로세스 메서드에서 나는 모든 메서드의 프로세스에 대해 상태 텍스트를 설정하는 데 사용했습니다. login process started
logged in
failed to login
입니다. 그러나 Backgroundworker
은 상태 열을 업데이트하지 않습니다. 모든 backgroundworker
이 완료된 후에 상태를 표시합니다. 누구든지 나에게 각 계정의 상태를 업데이트하는 방법에 대한 아이디어를 줄 수 있습니까 ?? 당신이 DoWorkEvent에 등록 여러 핸들러의 문제를 가지고있는 것처럼 모든여러 Backgroundworker C#
int threadNum;
public BackgroundWorker bcheker;
private void toolStripButton2_Click(object sender, EventArgs e)
{
if (wbcheckStatus == WorkerStatus.NotStarted || wblogcheckStatus == WorkerStatus.Completed)
{
threadNum = -1;
SetControlsStatus(ProgramStatus.BChecking);
toolStripButton2.Image = aTumblr.Properties.Resources.control_stop;
for (int i = 0; i < 4; i++)
{
bcheker = new BackgroundWorker();
bcheker.DoWork += new DoWorkEventHandler(bcheker_dowork);
bcheker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bchecker_completed);
bcheker.ProgressChanged +=bcheker_ProgressChanged;
bcheker.WorkerReportsProgress = true;
bcheker.WorkerSupportsCancellation = true;
bcheker.RunWorkerAsync();
}
}
else
{
threadNum = 10000;
bcheker.CancelAsync();
SetControlsStatus(ProgramStatus.BlogChecking);
}
}
public void bcheker_dowork(object sender, DoWorkEventArgs e)
{
while (!bcheker.CancellationPending)
{
int rownum = Interlocked.Increment(ref threadNum);
if (rownum >= bchecktableModel.Rows.Count)
{
break;
}
Thread.Sleep(1000);
BlogChecker bc = new BlogChecker(bchecktableModel[rownum, 1].Text, bchecktableModel[rownum, 2]);
bc.check();
wblogcheckStatus = WorkerStatus.Running;
}
if (bcheker.CancellationPending)
{
wblogcheckStatus = WorkerStatus.Completed;
SetControlsStatus(ProgramStatus.BCheckingDone);
}
}
public void bcheker_ProgressChanged(Object sender, ProgressChangedEventArgs e)
{
}
public void bchecker_completed(object sender, EventArgs e)
{
if (threadNum == bchecktableModel.Rows.Count+1)
{
SetControlsStatus(ProgramStatus.BCheckingDone);
wblogcheckStatus = WorkerStatus.Completed;
}
}