1
나는 아주 간단한 코드를 가지고 있지만 작동시키지 않습니다. BackgroundWorker를 사용하고 있습니다. 문제는 RunWorkerCompleted가 빨리 실행되는 것입니다. 실행 후 즉시 "작업 완료"메시지가 표시되지만 응용 프로그램은 몇 초 동안 'DataType data = new DataType (path);'으로 고정됩니다. beign 실행됩니다. 그 후 모든 DataGridViews 등이 올바르게 채워집니다. 이 한 줄을 Thread.Sleep으로 바꾸면 모든 것이 잘 작동하는 것 같습니다. 어떤 아이디어?RunWorkerCompleted too faster firing 너무 짧습니다.
public frmWindow(string path)
{
InitializeComponent();
DataType d;
backgroundWorker1.RunWorkerAsync(path);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string path = e.Argument as string;
DataType data = new DataType(path);
e.Result = data;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
d = e.Result as DataType;
MessageBox.Show("Work completed");
}
언제 UI를 업데이트하고 있습니까? 코드에서 명확하지 않습니다. 앱이 UI 스레드에있을 가능성이 높습니다 (예 : 그 부분은 백그라운드 작업자 외부에서 실행되는 gridview를 채 웁니다. – RobJohnson
RunWorkerCompleted에 대해 이야기 할 때 DoWork의 행을 언급합니다. – BrokenGlass
'그 후 모든 DataGridViews 등이 올바르게 채워집니다. ' 그리드를 채우는 것은 DoWork() 메소드가 아니라 시간을들이는 것입니다. –