나는 C# 및 Winforms를 사용하여 응용 프로그램을 만들고 보관하며 지정한 위치에 폴더를 저장합니다. 보관 폴더는 입니다. BackgroundWorker은 폴더 경로를 입력으로 사용하고 zip 아카이브를 생성합니다. 다음 단계에서는 파일이 필요합니다. 지정된 위치에서 이동하는, 다시 파일이 충분히 큰 및 UI 스레드를 걸 수있는 내가 FileMove라는 이름의 또 다른 BackgroundWorker에에 코드를 이동로, 모든 것이 여기의 FileMove 어떤 진행 상황을보고하지 않는 것을 제외하고 잘 작동 보관 기능이 끝나자 마자 바로 전화하는 기능입니다. (내가 900-1,000메가바이트를 압축하고있어 같은) 파일 이동이 LABEL3 쇼 "저장 파일, ... 기다려주십시오"하고 오랜 시간 후에 시작으로BackgroundWorker가 파일 복사 진행률을보고하지 않습니다?
private void FileMove_DoWork(object sender, DoWorkEventArgs e)
{
label3.Text = "Saving file,please wait...";
File.Move(temppath + @"\Output.jpg", savefilename);
}
private void FileMove_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label3.Text = "Saving file,please wait... " + e.ProgressPercentage.ToString(); //This should show Progress Percentage but it doesn't.
}
private void FileMove_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label3.Text = ("The folder has been successfully hidden.");
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
this.ControlBox = true;
}
내가 직면하고있어 문제는 곧 "폴더가 성공적으로 숨겨져 있습니다."라는 메시지가 나타납니다. ProgressChanged 이벤트 라벨도 백분율을 표시해야하지만 그렇지 않습니다. 잘못되었거나 잘못 표시된 곳을 지적하십시오. 도움이 될 것입니다.
진행률을보고 할 수있게 설정 했습니까? - [this] (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.workerreportsprogress.aspx) – Sayse
예 Sayse, BackgroundWorker가 진행 상황을보고 할 수 있습니다. – PurpleXenon
그럼 아마도 당신의 레이블이 UI 스레드에 있기 때문에, 당신은 [invoke it]해야합니다. (http://stackoverflow.com/questions/5192169/update-gui-using-backgroundworker?rq=1) – Sayse