C#中BackgroundWorker的使用方法C#中BackgroundWorker的使用方法?实际上,我正在执行一个操作,通过fill()方法填充PDF表单。将结果显示到pdfviewer需要更多时间,所以我决定使用backgroundworker来显示“处理图像”,并尝试使用它但未能实现这是我的代码片段:privatevoidbgwLoadFile_DoWork(objectsender,DoWorkEventArgse){这。调用((MethodInvoker)delegate(){????});}privatevoidbgwLoadFile_RunWorkerCompleted(objectsender,RunWorkerCompletedEventArgse){if(e.Cancelled==true){}elseif(e.Error!=null){}else{picLoading.SendToBack();}}当按钮FILL被点击时调用填??充方法图片加载。带到前面();充满();我需要在DoWork方法中添加wat语句,如果我尝试添加FILL()填充已被调用两次...任何人都可以帮助我谢谢所以让我们尝试找到一些答案:方法worker_DoWork()将在另一个线程中执行.通过在该方法中调用this.Invoke(),您将调用传递回gui线程,这使得后台工作人员的使用变得无用。相反,在worker方法中,您必须调用需要一些时间并且不与gui交互的方法。如果这个被调用的方法产生任何结果(例如,有一个返回值),这个信息应该被写入变量e.Result。worker_RunWorkerCompleted()方法将在gui线程内再次调用。允许您获取结果并使其以某种方式与gui交互。由于此方法将在gui线程上执行,因此它应该非常容易(或快速),否则您的gui将再次冻结。因此,给这些信息可以清理代码:privatevoidbtnFill_Click(objectsender,EventArgse){if(btnFill.Text=="Fill"){//为用户更新gui//并开始我们的长期运行任务//(禁用按钮等,因为//用户仍然可以点击它们!)。picloading.BringToFront();bgwLoadFile.RunWorkerAsync();}}privatevoidbgwLoadFile_DoWork(objectsender,DoWorkEventArgse){//让我们调用长时间运行的任务//并等待它完成。充满();}privatevoidbgwLoadFile_RunWorkerCompleted(objectsender,RunWorkerCompletedEventArgse){//我们回到了gui线程。//所以让我们向用户展示一些结果。if(e.Cancelled){//为了支持取消,长时间运行的//方法必须检查某种取消//标志(布尔字段)以允许它快速退出。labelMessage.Text="操作被取消。";}elseif(e.Error!=null){labelMessage.Text=e.Error.Message;}//隐藏图片以允许用户//再次访问gui。//(再次重新启用按钮等)picLoading.SendToBack();}添加填充();到你的bgwLoadFile_DoWork并将其从btnFill_Click中删除只是注意你可能想要调用你的picLoading.SendToBack();在'其他'之前还有,如果你写错或取消,它会留在那里—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
