我有WPF應用程序。在WPF中停止後臺工作
在頁面我有這樣的時顯示PanelLoading
是true
<Grid Panel.ZIndex="1000" HorizontalAlignment="Stretch" Grid.RowSpan="3" Visibility="{Binding PanelLoading, Converter={StaticResource BoolToVis}}">
<controls:LoadingPanel x:Name="loadingPanel" VerticalAlignment="Stretch"
IsLoading="{Binding PanelLoading}"
Message="Wait"
SubMessage="a minute"
/>
</Grid>
在這個頁面上「忙指示器」控制我也有其他控件(文本框,組合框等)
向的ItemsSource我綁定像一些值:
public string SearchWord
{
get { return _searchWord; }
set
{
_searchWord = value;
OnPropertyChanged("SearchWord");
RunFilterWorker();
}
}
在上面的例子中RunFilterWorker
將嘗試運行前夕ry在textBox中更改文本的時間。
RunFilterWorker
是一種創建BW並運行它的方法。
private void RunFilterWorker()
{
if (_filterWorker == null)
{
_filterWorker = CreateBackgroundWorker();//create if null (only on start)
}
else
{
if(_filterWorker.IsBusy)return; //do nothing if busy
}
_filterWorker.RunWorkerAsync();
}
private BackgroundWorker CreateBackgroundWorker()
{
var bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += filterWorker_DoWork;
bw.RunWorkerCompleted += filterWorker_CompleteWork;
return bw;
}
對此BW我綁定在DoWork
處理程序和RunWorkerCompleted
private async void filterWorker_DoWork(object sender, DoWorkEventArgs e)
{
PanelLoading = true;
var products = await FilterProducts();
e.Result = products;
}
private void filterWorker_CompleteWork(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
if (e.Cancelled) return;
var products = (e.Result) as List<ProductDTO>;
Products = products;
PanelLoading = false;
}
else
{
LogHelper.Log(e.Error);
}
}
所以,當BW開始他的工作 - PanelLoading
設置爲true
BusyIndicator控件和顯示。但在Complete
沒有發生與指標,它仍然在旋轉。我相信這不是指標控制問題,而是BW。
要@Servy:
private void filterWorker_CompleteWork(object sender, RunWorkerCompletedEventArgs e)
{
PanelLoading = false;
if (e.Error == null)
{
if (e.Cancelled) return;
var products = (e.Result) as List<ProductDTO>;
Products = products;
}
else
{
LogHelper.Log(e.Error);
}
}
不幫忙,不隱藏指示燈。
你的代碼應該按預期工作 - 你測試了你的loadPanel嗎?我將測試以下內容:將PanelLoading設置爲true,然後使用DispatcherTimer將PanelLoading設置回false(完全沒有bgw) –
@PhilipW,使用DispatcherTimer繁忙指示器也不能按預期工作。所以會試圖找到控制問題)) – demo