2013-04-19 3 views
2

일부 파일을 복사하는 백그라운드 작업자가 있습니다. 파일 복사가 끝나면 응용 프로그램을 시작하려고합니다. 내가 겪고있는 문제는 파일이 복사되는 동안 응용 프로그램을 시작하는 코드를 호출하여 사용 오류가있는 파일로 실행된다는 것입니다. 백그라운드 작업자가 완료 될 때만 특정 메서드가 호출되도록하기 위해 할 수있는 검사가 있습니까?메소드를 호출하기 전에 백그라운드 작업자가 완료 될 때까지

private void LaunchApplication(string targetPath, string targetExecutable) 
    { 
      CopyFiles(); 

      Process.Start(Path.Combine(targetPath, targetExecutable)); 
    } 

CopyFiles는 BackGroundWorker의 DoWork 메서드 내에서 호출됩니다. Process.Start ...가 호출되기 전에 이걸 완전 finsih로 보내고 싶습니다. 이제 여러 개의 실행 파일을 여러 개의 단추에 묶어서 Process.Start ...를 RunWorkerCompleted 이벤트에 넣을 수 없습니다.

+3

당신은 [RunWorkerCompleted (http://msdn.microsoft.com/en-gb/library/system.componentmodel.backgroundworker.runworkercompleted.aspx) 이벤트를 활용하고 있습니까? – DGibbs

+0

응용 프로그램을 실행하기 전에 파일이 복사되었는지 확인할 수 있습니다. –

+0

@DGibbs - 예,하지만 몇 가지 응용 프로그램을 시작할 수 있으며 사용자가 시작 버튼 중 하나를 클릭 할 때까지 어떤 응용 프로그램인지 알 수 없습니다. – Xaisoft

답변

1

CopyFiles()을 백그라운드 스레드에 넣으면 다음 코드 행이 실행되므로, 귀하의 경우에는 이 아닌은 백그라운드 작업자를 사용합니다. 대신 복사 파일이 완료 될 때까지 차단 한 다음 응용 프로그램을 시작합니다. 조금 기다리는 용도를 알려주는 일종의 창을 띄워 라. 당신이 기다려 여전히 백그라운드 작업자를 사용해야하는 경우

, 다음 CopyFiles()DoWork 핸들러에 있어야하고 Process.StartBackgroundWorker.RunWorkerCompleted 이벤트해야한다. RunWorkerCompleted

RunWorkerCompleted

스택 오버플 예에 완료에

MSDN : 또한

Run Worker Completed Sample Code

, 당신은 출시 한 번에 무슨 일이 일어나고 하나 확인하기 위해 글로벌 뮤텍스를 만들 수 있도록 여러 번 실행하면 하나만 처리됩니다.

Stack Overflow Global Mutex Question

+0

RunWOrkerCompleted에 Process.Start를 두는 것과 관련된 문제는 다양한 응용 프로그램을 시작하는 약 6 개의 버튼이 있으며 사용자가 클릭 한 정보가 전혀 없다는 것입니다. – Xaisoft

+0

@Xaisoft - 각 버튼에 대한 클릭 핸들러 또는 모든 버튼에 대한 핸들러를 추가 할 수 있습니다. 핸들러는 'object sender'인수가 전달됩니다. Button으로 캐스팅하고 일반 핸들러 접근법을 사용하는 경우 버튼의 이름을 찾을 수 있습니다. –

+0

그래서 버튼을 누르거나 exe 파일을 열 때 파일을 복사합니까? 파일을 복사하는 경우 실행 파일 경로를 백그라운드 작업자에 대한 인수로 전달할 수 있습니다. 단지 버튼을 클릭하여 exe를 여는 경우, 배경 작업자가'bgw.IsBusy'로 바쁘다면 확인하십시오. – kschieck

관련 문제