我有一个按钮,点击后会调用另一个方法。这个方法执行的操作可能需要很长时间......所以我想创建一个标签,在操作开始时显示并告诉用户等待,等操作完成后,该标签将消失。唯一的问题是,因为按钮是一个UI元素(我认为这就是原因),在按钮单击后更改标签的调用只有在按钮单击完成后才会激活......(所以基本上在单击之前标签是不可见的,并且不能在单击期间更改,因此保持不变)。
以下是我的代码:
以下是我的代码:
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
(而不是异步的Invoke
),但都没有成功......
有人能帮忙吗?