简单的BackgroundWorker不会更新网页上的选项卡标签应报告“10%完成”...“20%完成”...等。当我调试时,代码被命中,但我的选项卡没有在浏览器上更新。我尝试使用和不使用更新面板,使用和不使用母版页。protectedvoidbtnStartThread_Click(objectsender,EventArgse){BackgroundWorkerbw=newBackgroundWorker();//这允许我们的工作人员在工作期间报告进度bw.WorkerReportsProgress=true;//在后台线程中做什么bw.DoWork+=newDoWorkEventHandler(delegate(objecto,DoWorkEventArgsargs){BackgroundWorkerb=oasBackgroundWorker;//做一些简单的处理10秒for(inti=1;i<=10;i++){//以百分比报告进度b.ReportProgress(i*10);Thread.Sleep(1000);}});//当进度改变时做什么(例如更新进度条)bw.ProgressChanged+=newProgressChangedEventHandler(delegate(objecto,ProgressChangedEventArgsargs){label1.Text=string.Format("{0}%Completed",args.ProgressPercentage);});//当worker完成它的任务时做什么(通知用户)bw.RunWorkerCompleted+=newRunWorkerCompletedEventHandler(delegate(objecto,RunWorkerCompletedEventArgsargs){label1.Text="完成!";});bw.RunWorkerAsync();您可以对更新结果进行长轮询就我个人而言,我不会在Web应用程序中使用后台工作者。此外,请考虑查看SignalR、ServerSentEvents和AsyncandAwait或TaskParallel库。BackgroundWorker不能与ASP.NET一起使用并且不能很好地与ASP.NET一起使用,因为ASP.NET在请求/响应模型上工作。要接收任何更新,客户端的浏览器需要从服务器请求信息。例如,要更新标签,您需要向服务器发送请求以获取其新值。一种选择可能是在客户端使用AJAX来更新页面。但是,除了使用官方AJAX,您还可以使用iframe,这是异步执行长时间运行的进程的好方法,无需依赖任何特定的AJAX框架。单击按钮时,会动态生成一个不可见的iframe,用于在后台执行LongRunningProcess.aspx:和LongRunningProcess.aspx.cs:protectedvoidPage_Load(objectsender,EventArgse){for(inti=1;iyou您可以在此处查看结果并阅读DaveWard的精彩文章的更多内容:长请求的简单增量状态更新。这种情况很少见,但.NET有时可以同步运行异步任务(从MSDN上的文档可能是发生)但如果发生这种情况,它将阻止WinForms应用程序中的消息循环。要测试这个理论,您可以尝试在ProgressChanged处理程序和DoWork处理程序中调用Application.DoEvents(),看看是否有帮助。这是一个丑陋的工作,但如果调度程序同步运行您的任务,它应该强制UI更新。您基本上有两个选择。一个,您可以使用javascript从浏览器轮询计时器以获取当前完成百分比。setInterval是一种明显的方法要使用它,您可以使用jQuery或类似工具对服务器进行AJAX调用。但这有点低效,因为您的服务器听起来好像知道它何时进行或完成,因此服务器应该引发事件。您想要的两个和更多是使用SignalR。您已将事情设置为在引发定时事件时从服务器“推送”,但在HTTP中没有简单的方法(HTML5WebSockets是另一种选择)。使用像SignalR这样的服务器推送技术,您可以创建向客户端引发事件的“集线器”。它们可以是特定于用户的目标事件或针对所有客户类型的事件——由您决定。在此处查看介绍/演示。他们轻松解决了一个相当困难的问题:http://www.asp.net/signalr此外,正如其他人所提到的,您可能不想使用BackgroundWorker。尝试QueueBackgroundWorkItem。http://blogs.msdn.com/b/webdev/archive/2014/06/04/queuebackgroundworkitem-to-reliably-schedule-and-run-long-background-process-in-asp-net.aspx以上是C#学习教程:一个简单的BackgroundWorker不会更新网页上标签分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
