问题标签 [backgroundworker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
27941 浏览

c# - 在 WPF 中,什么相当于 Windows 窗体中的 Suspend/ResumeLayout() 和 BackgroundWorker()

如果我在后面代码中的函数中,并且我想实现在状态栏中显示“正在加载...”,则以下是有意义的,但正如我们从 WinForms 中知道的那样,这是一个否:

我们现在从 WinForms 第 1 章第 101 课中了解到,在整个函数完成之前,表单不会向用户显示更改……这意味着永远不会向用户显示“正在加载”消息。需要以下代码。

在 WPF 中处理这个基本问题的最佳实践是什么?

0 投票
18 回答
86700 浏览

c# - 如何等待 BackgroundWorker 取消?

考虑一个为您做事的对象的假设方法:

如何等待 BackgroundWorker 完成?


过去人们曾尝试过:

但是这个死锁,因为IsBusy直到RunWorkerCompleted事件被处理之后才会被清除,并且在应用程序空闲之前无法处理该事件。在工作人员完成之前,应用程序不会空闲。(另外,这是一个繁忙的循环 - 恶心。)

其他人建议将其添加到:

这样做的问题是Application.DoEvents()导致当前在队列中的消息被处理,这会导致重入问题(.NET 不能重入)。

我希望使用一些涉及事件同步对象的解决方案,其中代码等待事件 - 工作人员的RunWorkerCompleted事件处理程序设置。就像是:

但是我又回到了死锁:事件处理程序在应用程序空闲之前无法运行,并且应用程序不会因为正在等待事件而空闲。

那么你怎么能等待 BackgroundWorker 完成呢?


更新 人们似乎对这个问题感到困惑。他们似乎认为我会将 BackgroundWorker 用作:

不是这样,这不是正在做的,也不是这里要问的。如果是这样的话,使用后台工作人员就没有意义了。

0 投票
3 回答
17800 浏览

c# - .NET Web 服务和 BackgroundWorker 线程

我正在尝试在 web 服务方法中做一些异步的东西。假设我有以下 API 调用:http ://www.example.com/api.asmx

该方法称为GetProducts()

在这个 GetProducts 方法中,我做了一些事情(例如,从数据库中获取数据),然后在我返回结果之前,我想做一些异步的事情(例如,给我发一封电子邮件)。

所以这就是我所做的。

现在,当我运行此代码时,永远不会发送电子邮件。如果我取消注释 Thread.Sleep .. 然后发送电子邮件。

那么......为什么后台工作线程被拆除了?它依赖于父线程吗?这是我应该在 asp.net Web 应用程序中执行后台或分叉线程的错误方式吗?

0 投票
2 回答
2579 浏览

c# - 对未触发的 BackgroundWorker 事件感到困惑

这似乎是一个有点做作的例子,但我只能摸不着头脑。

好的,我有一个控制台应用程序,它实例化一个 WindowsForm 并在表单上调用一个名为 DoSomeWork() 的方法。

Form1 看起来像这样...

反过来,外面的班级看起来像这样......

最后 InnerClass 看起来像这样......

由于未知的原因(对我而言),InnerClass 中的 BacgroundWorker 似乎从未触发ProgressChanged事件。如果我更换

在类程序中,它工作正常。那么,当我通过表单调用相同的方法时,为什么我的事件不会触发呢?

谢谢!

编辑:我似乎通过将 ProgressChanged 事件处理程序作为抛出 NotImplementedException 来让人们失望,所以为了清楚起见,我已经删除了它。

0 投票
3 回答
2725 浏览

c# - 我的 BackgroundWorker 实例何时会被垃圾回收

考虑这个代码块

一切都很好,但我想了解为什么对象(工作者、视图和更新)没有被垃圾收集

0 投票
4 回答
3121 浏览

datagridview - 从 BackgroundWorker 将结果“流式传输”到 DataGridView

有没有办法将一组结果(例如 DataTable)从 BackgroundWorker“流式传输”到 DataGridView。我想要做的是查询数据,并将结果填充到 DataGridView(如 SQL Server Management Studio 中的查询网格结果)。我的第一个想法是使用 BackgroundWorker(以避免 UI 冻结效果),但是当 BackgroundWorker 正在加载结果时,仍然会有一个可感知的“滞后”。

解决此问题的最佳方法是什么?

0 投票
5 回答
25875 浏览

c# - BackgroundWorker 中未处理的异常

我的 WinForms 应用程序使用许多BackgroundWorker对象从数据库中检索信息。我正在使用 BackgroundWorker,因为它允许 UI 在长时间运行的数据库查询期间保持畅通,并且它为我简化了线程模型。

我在其中一些后台线程中偶尔会遇到 DatabaseExceptions,并且我在调试时在工作线程中目睹了这些异常中的至少一个。我相当有信心这些异常是超时,我认为它不时期望它是合理的。

我的问题是当这些后台工作线程之一中发生未处理的异常时会发生什么。

我认为我不能在另一个线程中捕获异常,但是我可以期望我的 WorkerCompleted 方法被执行吗?我可以询问 BackgroundWorker 的任何属性或方法是否有异常?

0 投票
5 回答
2494 浏览

sql-server - 从 SqlDataAdapter 后台填充 DataGridView

我有一个大型数据集(超过 100,000 条记录),我希望将其加载到 DataGridView 中。执行此操作的存储过程可能需要 10 秒或更长时间才能完成。

到目前为止,我有一个 BackgroundWorker 可以防止 UI 锁定,并实现了一个基本的“请稍候”对话框。

我想做的是以某种方式在 DataGridView 中填充结果,因为它们以某种方式从数据库返回。描述它的最佳方式是 SQL Server Management Studio 是如何做到的——当查询运行时,即使查询仍在执行,行也会立即返回。还有一个按钮可以停止查询并保留已返回的行。

我怎样才能在我自己的代码中做到这一点?

DataGridView 仅用于显示数据行,然后用户单击其中一个执行其他操作。没有任何东西被写回数据库。

0 投票
5 回答
3269 浏览

backgroundworker - BackgroundWorker 线程:更新 UI 和中止操作

我在后台工作线程上运行了一系列耗时的操作。在各个阶段,我通过调用委托来更新(Windows 窗体)进度条。但是,更多时间操作之一发生在单行代码上。

是否有可能 :

a) 在执行该单行代码时更新 UI,或者至少显示一个动画图标,向用户显示工作正在完成。

b) 让用户在执行该单行代码时取消后台工作线程

0 投票
3 回答
518 浏览

com - 为什么从 .NET BackgroundWorker 线程调用非托管代码会影响 UI?

BackgroundWorker我在 .NET 2.0线程中有一系列长时间运行的操作。当我调用位于引用程序集中的非托管代码时,UI 被冻结,直到调用完成。

为什么是这样?我不应该从BackgroundWorker线程中进行这些调用吗?


是的,它是一个 COM 组件,但我不确定如何判断它是否是 STA,以及它的含义/解决方案是什么。我对该组件进行了多次调用,但只有在长时间运行的情况下,我才注意到 UI 变得无响应。

这些调用从服务器检索数据。