我創建了一個用於將數據從一個數據庫導入和轉換爲另一個數據庫的小工具。由於這需要很長時間,我想用一個不確定的進度條爲用戶顯示某種進度。 只要導入正在運行,進度條也應該運行。 我用這個網站作爲參考:The ProgressBar control但是我很難理解DoWork-Method的作用,因爲一個不確定的進度條選項被設置一次。在WPF中使用不確定進度條和Backgroundworker
我想出了一個半途而廢的解決方案,導入完成後我無法停止動畫。 有人可以幫我嗎?
XAML:
<ProgressBar Minimum="{Binding Path=Minimum}" Maximum="100" IsIndeterminate="{Binding Path=IsIndeterminate}" Height="20" Grid.Column="2" Grid.Row="5" Grid.ColumnSpan="2"/>
視圖模型:
public void StartImportThread()
{
ButtonsEnabled = false;
var th = new Thread(new ThreadStart(StartImport));
th.IsBackground = true;
th.Start();
}
public void StartImport()
{
_threadDispatcher = Dispatcher.CurrentDispatcher;
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_Complete;
worker.RunWorkerAsync();
// Doing Import Stuff
worker.CancelAsync(); // Import finished
ButtonsEnabled=true;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
// while(true)
// {
Minimum = 0;
IsIndeterminate = true;
// }
}
private void worker_Complete(object sender, RunWorkerCompletedEventArgs e)
{
// if (e.Cancelled)
// {
IsIndeterminate = false;
Minimum = 100;
// }
}
你的意思是* indeterminate *而不是* indeterminated *? –
@JimMischel看起來他實際上確實不確定。它將提到一個進度指標,其中你實際上並不知道該操作需要多長時間,而只是表明進展確實正在進行。 – Servy
這就是我的意思,它是顯示導入仍在運行的指示器。我也在我的問題中進行了編輯。感謝您指出。 – Scorch