【发布时间】:2015-10-08 20:13:51
【问题描述】:
我有Button,它在点击时调用另一个方法。
另一种方法执行可能需要很长时间的操作...
所以我想创建一个Label,它出现在操作开始并告诉用户等待,操作完成后,Label会消失。唯一的问题是,因为Button 是一个UI 元素(这就是我认为的原因),所以在Button 点击内更改Label 的调用只有在Button 点击之后才会激活完成...(所以基本上Label 在点击之前是不可见的,并且在点击期间无法更改,所以它保持这种状态)。
这是我的代码:
private void SearchButtonActions()
{
UI.InvokeA(() => lstFiles.ItemsSource = FDItems);
bool SearchAndListing = false;
//UI.InvokeA(() => lblWait.Height = double.NaN);
//UI.InvokeA(() => lblWait.Visibility = Visibility.Visible);
//UI.InvokeA(() => lblWait.Content = "Search Started...");
int index = cbTypes.SelectedIndex;
string selecteditem = cbSearchOption.SelectedItem.ToString();
SearchAndListing = FD.Search(index, selecteditem);
FDItems = new ObservableCollection<Item>(FD.Items);
//UI.InvokeA(() => lblWait.Height = 0);
//UI.InvokeA(() => lblWait.Visibility = Visibility.Hidden);
//UI.InvokeA(() => lblWait.Content = "Search Ended.");
if (SearchAndListing)
{
UI.InvokeA(() => lstFiles.ItemsSource = FDItems);
UI.InvokeA(() => lblCount.Content = string.Format("Items: {0}", FDItems.Count));
}
}
我说的是改变lblWait的方法...
顺便说一句:UI.Invoke - 是Dispatcher.Current.InvokeAsync(Action) 的快捷方式
我尝试过使用Tasks、BackGroundWorker,并将UI.Invoke 更改为Invoke(synchronically 而不是asynchronically),但都没有成功...
有人可以帮忙吗?
【问题讨论】:
-
使用 task.run 和进度条
标签: c# .net wpf user-interface asynchronous