首页 / C# / C#WPF – 长按操作按钮单击
C#WPF – 长按操作按钮单击
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#WPF – 长按操作按钮单击,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2444字,纯文字阅读大概需要4分钟。
内容图文
我有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(同步而不是异步),所有都没有用…
有人可以帮忙吗?
解决方法:
我以前遇到过这个问题,直到现在才开始考虑它.
你的论点是正确的,UI线程当前正在运行Click方法,所以它很忙,不会运行任何其他东西.
即使使用调度程序,它仍然执行click方法,因此ui线程会弹出下一个委托,只有在完成后才能运行.
所以这不起作用:
lbl.Visibility = Visibility.Visible;
Thread.Sleep(3000);
这不起作用:
Dispatcher.Invoke(() => lbl.Visibility = Visibility.Visible);
Dispatcher.Invoke(() => Thread.Sleep(3000));
什么工作是从后台线程调度ui操作.
XAML:
<StackPanel>
<Button Click="Button_Click" Content="Click"/>
<Label x:Name="lbl" Content="Label" Visibility="Hidden" Foreground="Red" FontSize="22" HorizontalAlignment="Center"/>
</StackPanel>
CS:
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Dispatcher.InvokeAsync(() =>
{
Debug.WriteLine("Visibility");
lbl.Visibility = Visibility.Visible;
});
await Task.Run(() =>
{
return Dispatcher.InvokeAsync(() => Thread.Sleep(3000));
});
}
仅供参考:您可能想知道为什么我不使用调度程序将Visibility值传播到UI线程.这是因为每个DispatcherObject(我们的DependencyObject派生自DispatcherObject)将执行传播到它关联的Dispatcher.
内容总结
以上是互联网集市为您收集整理的C#WPF – 长按操作按钮单击全部内容,希望文章能够帮你解决C#WPF – 长按操作按钮单击所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。