我有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