2014-05-21 3 views
0

어떻게하면 아래 작업을 취소 할 수 있습니까? 내가 cancelAsyncBackgroundWorker 취소 (루프없는 단일 메서드)

if (workerLoad.CancellationPending) 
    { 
     e.Cancel = true; 
     break; 
    } 

DoWork을 취소 상태를 확인하고 설정하는 실행 루프가없는

workerLoad = new BackgroundWorker(); 
        workerLoad.WorkerSupportsCancellation = true; 


        workerLoad.DoWork += (o, ea) => 
        { 
         //Thread.Sleep(100); 
         Dispatcher.BeginInvoke((Action)(() => BindWorkarea(selectedFolder,false))); 
         //Dispatcher.Invoke((Action)(() => workareaListView.DataContext = pages));      
        }; 
        workerLoad.RunWorkerCompleted += (o, ea) => 
        { 
         Mouse.OverrideCursor = null; 
        }; 
        workerLoad.RunWorkerAsync(); 

이 파일을 통해 반복하고 디스패처를 사용하여 화면에 추가되어 하나의 방법을 가지고있다.

+1

당신은'BackgroundWorker'를 사용하고 있지 않습니다. 'Dispatcher'에서만 모든 작업을 수행합니다. 'BackgroundWorker'는 전혀 필요 없습니다. –

+0

맞습니다. 발견 한 모든 파일에 대해 UI를 업데이트해야하므로 모든 작업이 디스패처에서 실행됩니다. 운영자를 취소하려면 어떻게해야합니까? – Jay

답변

0

당신은 하나의 함수에 모든 일을하고있다 ... 당신은 Dispather를 통해 UI를 업데이트 루프로 작업을 중단하고 루프의 내부에 다음 BackgroundWorker 내부 루프를 넣을 필요가

. 이렇게하면 자유롭게 과정을 무너 뜨릴 수있는 기회가 생깁니다.

+0

dispincher beginInvoke를 취소하는 방법이 있다고 생각합니다. 나는 이것을 알아 내야 할 것이다.이 개념은 조금 새롭다. (.Net4.0/4.5). 나는 나중에 여기에서 갱신 할 것이다. – Jay