问题标签 [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 回答
2783 浏览

c# - C#/.NET:使用 NUnit 测试 BackgroundWorker

此测试在使用 NUnit 控制台运行程序运行时失败。如果我只用 TestDriven.NET 运行该测试,它就可以工作,但如果我用 TestDriven.NET 运行整个套件,它就不行:

我怀疑这个问题与没有消息循环有关,但我不确定。

使用 BackgroundWorker 有什么要求?

是否有解决方法可以使测试正常工作?

0 投票
2 回答
12564 浏览

.net - WPF等待光标与BackgroundWorker线程

我想在 BackgroundWorker 进程在另一个线程中运行时显示沙漏光标并禁用窗口。

这就是我正在做的事情:

窗口像我想要的那样被禁用,但光标仍然是一个箭头。我怎样才能使它成为等待光标?

根据这个问题 ,它似乎适用于vg1890 : Disabling all but one control in a WPF window

0 投票
7 回答
8199 浏览

.net - 我可以在让用户等待之前更新 WPF 状态栏文本吗?

我有一个带有状态栏的 WPF 应用程序。

当我做少量工作时,我想在那里显示文本并切换到沙漏等待光标。

此代码将更新光标,但状态栏文本不会更新...


更新

亚历山德拉回答的启发...

如果我这样做,它会起作用,但我对这个解决方案一点也不满意。有没有更简单的方法?

我宁愿它看起来像这样......

或者甚至更好...


更新

我还尝试将 TextBlock 绑定到公共属性并按照IanGilham 的建议实施INotifyPropertyChanged。这不起作用

XAML:

视觉基础:

0 投票
1 回答
1592 浏览

.net - 有没有简单的方法来设置 WPF 状态栏文本?

我想在我的程序执行一些工作时让用户稍等片刻之前在我的状态栏中设置 TextBlock 的文本。

显然,而不是像这样做一个很好的小功能(这不起作用):

我不得不改用这个怪物:

而 Load() 函数现在是一个 Sub!

必须有更好的方法来处理这种简单的情况。这不需要是异步的。

0 投票
6 回答
78896 浏览

c# - 如何彻底“杀死”后台工作人员?

我正在编写一个重复运行一系列数字 IO 操作的 Windows 应用程序。

当用户单击“开始”按钮时,这一系列动作开始,并由 backgroundWorker1_DoWork() 中的后台工作人员完成。

但是,有时我会收到“此后台工作人员当前正忙.......”错误消息。

我正在考虑在代码中实现以下内容,方法是在开始另一个操作序列之前使用 while 循环“杀死”后台工作人员:

我想我主要担心的是, backgroundWorker1 最终会被“杀死”吗?如果会,完成它需要很长时间吗?

这种编码会让我陷入无限循环吗?

0 投票
4 回答
11958 浏览

c# - BackgroundWorker OnWorkCompleted 抛出跨线程异常

我有一个用于数据库分页的简单 UserControl,它使用控制器来执行实际的 DAL 调用。我使用 aBackgroundWorker来执行繁重的工作,并在OnWorkCompleted事件中重新启用某些按钮、更改TextBox.Text属性并为父表单引发事件。

表单 A 包含我的用户控件。当我单击打开表单 B 的某个按钮时,即使我没有在“那里”做任何事情并关闭它,并尝试从我的数据库中引入下一页,OnWorkCompleted在工作线程(而不是我的主线程),并引发跨线程异常。

目前我InvokeRequired在那里的处理程序处添加了一个检查,但不是OnWorkCompleted要在主线程上调用整个点吗?为什么它不能按预期工作?

编辑:

我设法将问题缩小到 arcgis 和BackgroundWorker. 我有以下解决方案,它向 arcmap 添加了一个命令,Form1用两个按钮打开一个简单的命令。

第一个按钮运行BackgroundWorker睡眠 500 毫秒并更新计数器。在RunWorkerCompleted方法中它检查InvokeRequired并更新标题以显示该方法最初是在主线程还是在工作线程中运行。第二个按钮刚刚打开Form2,其中不包含任何内容。

起初,所有的调用RunWorkerCompletedare都是在主线程内进行的(正如预期的那样——这就是 RunWorkerComplete 方法的全部要点,至少我从MSDN上了解到的BackgroundWorker

在打开和关闭之后Form2RunWorkerCompleted总是在工作线程上被调用。我想补充一点,我可以让这个问题的解决方案保持原样(InvokeRequiredRunWorkerCompleted方法中检查),但我想了解为什么它会违背我的期望。在我的“真实”代码中,我想始终知道该RunWorkerCompleted方法是在主线程上调用的。

我设法form.Show();在我的命令中指出问题BackgroundTesterBtn- 如果我ShowDialog()改用,我没有问题(RunWorkerCompleted总是在主线程上运行)。我确实需要Show()在我的 ArcMap 项目中使用,这样用户就不会被绑定到表单。

我还尝试在普通的 WinForms 项目中重现该错误。我添加了一个简单的项目,它只打开没有 ArcMap 的第一个表单,但在那种情况下,我无法重现错误 - 在RunWorkerCompleted主线程上运行,无论是我使用Show()还是ShowDialog()打开之前和之后Form2。我尝试在 my 之前添加第三种形式作为主要形式Form1,但它并没有改变结果。

是我的简单 sln (VS2005sp1) - 它需要

ESRI.ArcGIS.ADF(9.2.4.1420)

ESRI.ArcGIS.ArcMapUI(9.2.3.1380)

ESRI.ArcGIS.SystemUI (9.2.3.1380)

0 投票
1 回答
2907 浏览

c# - C# 在后台工作线程 DoWork() 中加入线程

在我的 DoWork() 函数中,我向我们的 sip 服务器注册。然后我必须等待回复。但是,我得到的响应是在另一个事件中收到的。但是,在我能够检查 DoWork() 中的标志之前,DoWork() 已经准备就绪,并且响应随之而来。

我试图找到一种方法来等待 DoWork() 直到我在诊断事件中得到响应。我有一个在该事件中设置的全局标志,我必须检查 DoWork()。

感谢您的任何建议,

0 投票
2 回答
295 浏览

performance - 仅在 I/O 负载低时运行线程

我有一个执行 I/O 操作的后台线程(使索引保持最新)。但除此之外,还有几个客户端访问服务器的硬盘,我希望这些访问尽可能快。所以我想,如果索引线程仅在 I/O 负载较低时运行,那就太好了。

有没有办法解决这个问题?

我也愿意接受其他建议。

0 投票
3 回答
1311 浏览

python - GAE中的后台进程

我正在使用 Google App Engine 和 Django 1.0 (app-engine-patch) 开发一个网站

我的程序的主要部分必须在后台运行并更改本地数据并发布到远程 URL

有人可以提出一种有效的方法吗?

0 投票
1 回答
3046 浏览

c# - 为 BackgroundWorker 设计一个接口

在我的 Windows 窗体应用程序中,我有一个扩展后台工作程序的类,我们在我的窗体类中将其称为 ExtendedBGW1.cs,我将其声明为成员变量,因此我对整个类具有如下作用域:

稍后在表单构造函数中我这样做

我的 InitializeBackgroundWoker() 方法看起来像这样

现在是我的设计问题。我现在知道我将拥有更多不同的类,比如我的扩展 BackGroundWorker 的扩展 BGW1.cs,所以我想如果我创建一个 IExtenedBackGroundWorker,我可以做这样的事情。

并且仍然具有 Main 类的适当范围。然后我可以创建以后需要的任何 IExtendedBackGroundWorker 实现。

我可以毫无问题地为方法和属性创建接口,但是当我尝试在接口、基类和主类之间正确连接事件时,我真的遇到了问题。

有没有人有任何想法?

这是我在 Main 中遇到的错误

这是我在实现界面时遇到的错误

这是我的界面现在的样子: