2014-05-21 45 views
0

如何取消下面的工作?取消BackgroundWorker(無循環的單一方法)

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(); 

我沒有循環運行檢查取消狀態,並設置cancelAsync

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

DoWork的,得到了​​只有一個方法,它是通過文件循環使用調度添加到屏幕上。

+1

你沒有使用'BackgroundWorker'。你只在「Dispatcher」中完成所有工作。根本不需要'BackgroundWorker'。 –

+0

你說得對,我需要爲每個我找到的文件更新UI,所以我在調度器下運行所有​​的東西。我如何取消調度員? – Jay

回答

0

你做所有的工作在一個函數...

您需要打破你的工作進入一個循環,把循環中的BackgroundWorker內,則循環內通過Dispather更新UI。這樣你將有機會隨意分解這個過程。

+0

我相信有一種方法可以取消調度程序beginInvoke。我將不得不找到這個,這個概念對我來說有點新(.Net4.0/4.5)。我會稍後更新 – Jay