저는 Backgroundworker를 항상 사용했으며 비동기/대기 키워드를 처음 사용했습니다. 지금은 Backgroundworker에서 async/await (WPF MVVM 앱)의 코드를 리팩터링하려고합니다.리팩토링 배경 작업자를 async/await으로 변경
GenerateCommand = new DelegateCommand(GenerateHandler, CanGenerate);
아마 나를 위해 작동 dev에있는 'AsyncCommand'LIB 표현이가 본 적이 :
나는 다음과 같이 인스턴스화 내 VM에서 명령을 받았습니다.모든 처리기는 완료 이벤트에 이벤트 핸들러를 등록하고 서비스에서 Generate 메소드를 호출합니다.
private void GenerateHandler()
{
generatorService.GenerationFinished += OnGenerationFinished;
generatorService.Generate(mDataFields, mGenerateFilesViewModel, mAmount);
}
그런 다음 서비스의 생성 방법은 BackgroundWorker에 시작 :
public void Generate(IEnumerable<IDataField> dataFields, IGenerateFilesViewModel generateFilesViewModel, int amount)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
}
DoWork 방법은 내가 표시 할 방법이 확실 해요 시간이 소요되는 작업
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
GenerateCommand generateCommand = null;
if (mUploadFiles)
{
generateCommand = new GenerateCommand(mDataFields, mOutputDirectory, mTemplateFileName, mAmount, mSelectedCollection, mSelectedAccountKey);
}
else
{
generateCommand = new GenerateCommand(mDataFields, mOutputDirectory, mTemplateFileName, mAmount);
}
try
{
generateCommand.Execute();
}
catch (SEHException ex)
{
Console.WriteLine(String.Format("Generation of files threw an exception. {0}", ex.Message));
}
}
을한다 async 키워드를 사용하여 현재 비동기 메소드를 기다리고 있어야합니다. worker_DoWork를 async로 표시하고 Generate 메서드에서 호출을 기다리고 있지만 Generate 메서드는 VM의 GenerateHandler에서 기다릴 수 있도록 비동기로 표시되어야합니까? 죄송합니다
내가 당신을 혼란 합니다만,이 모든 ABIT 저를 혼동하는 경우 ... 도움 비동기/await를 구문 설탕 혜택 코딩되어 편리
것은 당신은 완전히 마이그레이션 할 수 있어야에 비동기/await를 비동기 방식으로 DoWork 이벤트 핸들러를 다시 작성하여 및 코드 어딘가에 그것을 기다리고 BackgroundWorker를 완전히 제거하십시오. –
'GenerateHandler'와'GenerateMdfHandler'는 오타입니다, 아니면 다른 방법입니까? – Sam
@Sam 그것은 오타되었습니다, 미안 해요. – user3292642