当前位置: 首页 > 编程语言 > C#

使用Async - Await时的WPF ProgressBar用法分享

时间:2023-04-10 19:45:23 C#

C#学习教程:使用Async/Await时WPFProgressBar的用法awaitTask.Run(()=>db.Invoices.AsNoTracking().ToList());退回发票;}使用进度条的最佳方式是什么?我不需要加载百分比(尽管这很有用),我只需要在加载数据的开始和结束时显示/隐藏进度条。有没有办法创建一个完成或完成的方法?我对async/await很陌生,所以请小心!假设在某些UI事件处理程序中调用了GetInvoices,并且有一些名为ProgressBar的进度条控件,这非常简单:privateasyncvoidOnButton1Click(..){varresult=awaitGetInvoices();ProgressBar.IsIndeterminate=false;//也可以隐藏它//TODO:处理结果}如果您想显示实际进度,请参阅Progress和IProgress。你已经拥有了你所需要的。这里展示了一个简单的例子,包括任务和使用await和ContinueWith。使用系统;使用System.Threading.Tasks;使用系统诊断;publicclassProgram{publicstaticvoidMain(){Taskt=newProgram().TestTasks();Console.WriteLine("你好");();}publicasyncTaskTestTasks(){秒表watch=Stopwatch.StartNew();Console.WriteLine("1."+watch.ElapsedMilliseconds);//等待任务intres=awaitTestAsync();Console.WriteLine("2."+watch.ElapsedMilliseconds+""+res);//保存任务并等待它Taskt=TestAsync();t.ContinueWith((r)=>{Console.WriteLine("4."+watch.ElapsedMilliseconds+""+r.Result);});Console.WriteLine("3."+watch.ElapsedMilliseconds);t.等待();}publicstaticasyncTaskTestAsync(){awaitTask.Delay(TimeSpan.FromSeconds(2));返回42;}}这会打印:1.0hello2.2009423.20094.401342请注意await如何离开该方法并在Main方法中打印“hello”,并在(大约)2秒后在TestTasks方法中继续。另一方面,如果我们不等待,如第二次调用TestAsync所示,将立即打印3。然后在2秒后打印4。考虑到这一点,您可以在返回任务时调用方法GetInvoices。//将进度条的状态设置为不确定Listresult=awaitGetInvoices();//将进度条状态设置为无您可以这样做:vartask=Task.Run(()=>db.Invoices.AsNoTracking().ToList());//显示进度task.ContinueWith(...关闭进度条...);实际上,您使用Task.ContinueWith构造来捕获任务的终止并隐藏您之前显示的进度条。注意:请记住,从另一个线程操作UI元素需要Invoke(),因为该调用会将实际调用重定向到主线程,这是唯一可以在Windows上操作UI控件的线程。以上就是C#学习教程:WPFProgressBar使用Async/Await时的用法分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: