데이터 처리 시간이 길기 때문에 프로그램에서 현재 수행하고있는 GUI 및 리치 텍스트 상자가있는 응용 프로그램이 있습니다. 내가 잘 다음 코드를 호출 할 수있는 BackgroundWorker 방법에backgroundworker에서 호출 한 메서드 내에서 프로세스 업데이트 C#
1 :
나는 그 두 가지 접근 방식을 시도
GlobalVar.backgroundWorkerAppendText = task.Build_CSV_List();
Processchange();
내가 인해 비 정적에 헬퍼 클래스에 Form1.Processchange();
를 사용할 수없는 반면, 컨텍스트
2 따라서 첫 번째 이벤트 핸들러를 만들려고했습니다.
아이디어는 helper.UpdateConsole은() 이벤트
public event EventHandler OnConsoleUpdate;
public void Consoleupdate()
{
OnConsoleUpdate(this, EventArgs.Empty);
}
을 올릴 것이라고했다 BackgroundWorker에 수신 대기하고 불행하게도이 성공하지이었다 컨텍스트
public void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
StandardTasks task = new StandardTasks();
Helper helper = new Helper();
helper.OnConsoleUpdate += Processchange;
task.DoSomeStuffHere()
}
public void Processchange(object sender=null, EventArgs e=null)
{
//MessageBox.Show(GlobalVar.backgroundWorkerAppendText);
GlobalVar.next = false;
backgroundWorker1.ReportProgress(1);
while (GlobalVar.next == false)
{
helper.TimeBreaker(100,"ms");
}
}
에서 Processchange를 호출하는 것이다. 이벤트가 일어나 자마자 나는 errormessage System.NullReferenceException
을 얻었습니다. 그 후 - googling-은 내가 이벤트 워크 쇼에 첨부 된 listerner가 없기 때문에 Backgroundworker Do 작업에 첨부했습니다.
편집 : OnConsoleUpdate() == null의 도우미가
아래의 스크린 샷과 같이 해결책 중요 할 수있는 다른 클래스 파일 "헬퍼"입니다.
나는 너희들이 나를 도울 수 있기를 바랍니다.
인가 (꼭지)? 그런 다음 ThreadPool에서 Task를 시작하고 Progress 객체를 전달할 수 있습니다. Backgroundworker를 계속 사용하려면 관련 코드를 더 많이 표시해야합니다. – Fildor
이 백그라운드 작업을 어디에서 시작하셨습니까? 나는 그런 식으로 뭔가 : backgroundWorker1.RunWorkerAsync(); – Arkadiusz
BTW : 일부 코드 냄새가있는 "GlobalVar"클래스가 있습니다 ... – Fildor