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

c# - 线程和 ArcGIS

我刚刚偶然发现了 Backgroundworker 对象,它似乎是我正在寻找的工具,可以让我的 GUI 在执行计算时做出响应。我正在为 ArcGIS 编写 IO 插件。

我正在 ArcGIS 之外进行一些数据处理,使用 backgroundworker 可以正常工作。但是当我将数据插入 ArcGIS 时,后台工作人员似乎将持续时间增加了 9 倍左右。将处理代码放在 DoWork 方法之外,可以将性能提高 9 倍。

我在网上读过这几个地方,但我没有多线程编程的经验,而且像 STA 和 MTA 这样的术语对我来说毫无意义。链接文本 我也尝试使用简单的线程实现,但结果相似。

有谁知道我可以做些什么才能使用 ArcGIS 处理和维护响应式 GUI?

编辑:我已经包含了我与后台工作人员交互的示例。如果我将 StartImporting 方法中的代码放在 cmdStart_Click 方法中,它的执行速度会快得多。

亲切的问候,卡斯帕

0 投票
3 回答
981 浏览

c# - 后台工作者事件处理

我一直在努力处理后台工作线程中的事件。

我遇到的所有文档都让我相信,当 DoWork 事件处理程序引发异常时,应该在 RunWorkerCompleted 处理程序中处理该异常,并且该异常将在 RunWorkerCompletedEventArgs 的 Error 属性中可用。

这很好,但在调试期间,我总是看到用户代码消息未处理的异常。这让我相信我的方法有问题。

我应该采取什么步骤来解决这个问题?

问候,乔纳森

0 投票
1 回答
2034 浏览

.net - 请帮我解决我的 W3C 验证 API 超时问题

我正在使用 W3C 验证服务来检查我在 TextBox 中键入的文本是否是有效的标记。

有效的

它几乎可以工作了。但是,在特定条件下,我的输入会导致错误,然后是无休止的超时异常。我必须关闭重新打开程序才能让它再次工作。

请浏览我的代码并帮助我解决这个问题。

我有一个带有 TextBox 和 StatusBar 的非常简单的 WPF 应用程序。当我输入时,状态栏会更新,让我知道我输入的标记是否有效。因此,我不会敲击服务,仅在没有击键的情况下经过一秒钟或更长时间后才会进行验证。

无效 http://img9.imageshack.us/img9/3788/invalidr.gif

它的状态栏可能会显示:“正在验证...”、“有效”、“无效”,或者——如果有的话——异常的消息。

验证 http://img7.imageshack.us/img7/5842/validating.gif

以下验证成功:

XHTML 输入

如果我像这样打破我的段落,<p>This is a test</那么在尝试处理响应 XML 时会出现此异常:

名称不能以 '"' 字符开头,十六进制值 0x22。第 86 行,位置 40。

XML 异常 http://img11.imageshack.us/img11/3066/namecannotbegin.gif

如果验证连续两次失败,那么我似乎不能只修复我的段落标签并像往常一样继续。由于某种原因,每个后续验证都会失败,并出现以下异常:

操作已超时

超时 http://img21.imageshack.us/img21/7600/timedout.gif

这很奇怪。

很抱歉发布我的整个项目,但我不知道我的问题来自哪里。可能是我的线程、Web 服务通信、异常处理......我似乎找不到它。我是否正确关闭了我的 StreamWriter、HttpWebRequest 和 ResponseStreams?

XAML

视觉基础

谢谢你的帮助!

0 投票
1 回答
3225 浏览

c# - 多次重用后台工作者

我正在使用后台工作人员进行昂贵的操作:

最后我有这个:

我现在有另一个昂贵的手术。我可以重用这个相同的后台工作人员吗?我现在想要新的回调,因为我不希望 ProgressChanged 和 DoWork 回调上的 switch 语句来确定我是在执行操作 1 还是 2。

使用 2 个单独的后台工作类是否更简单

0 投票
3 回答
1629 浏览

iis - IIS7 中的 BackgroundWorker 线程 - 失败!

只是想知道是否有人在以集成管道模式在 IIS 7 下运行的站点中使用 BackgroundWorker 线程有任何问题?

我正在尝试使用这样的野兽来更新数据库架构(显然是管理功能),并且它在 Cassini 中完美运行,但是当我部署到 IIS 7 时,线程获取大约一行代码并静默结束。有没有办法告诉线程为什么结束?

提前致谢。

0 投票
2 回答
517 浏览

backgroundworker - ThreadPool 何时将线程分配给 Backgroundworker 的实例?

如果我没记错的话,.NET 中的 Backgroundworker 将从 CLR ThreadPool 中获取一个线程,以执行后台任务。我想实例化一个 backgroundworker 对象的集合或列表。但是,并非集合中的所有对象都会同时被调用。所以让我担心的是,如果我有 10 个 backgroundworkers 对象的集合,CLR ThreadPool 将为我分配 10 个线程,如果我的集合中有太多对象,我认为它会用完 ThreadPool 中的线程。

所以这里我的问题是,ThreadPool 何时将线程分配给 BackgroundWorker 的实例?是在实例化对象时还是在调用方法 RunWorkerAsync() 时?

预先感谢您的所有帮助

0 投票
3 回答
1269 浏览

c# - 进度条不更新

我有以下代码将数据写入 XML 文件。

它使用从数据库中获取数据的同一个 BackgroundWorker。我的进度条在从数据库读取时正确显示进度。但是,在将 XML 写入的进度条归零后,即使该过程正确完成,它也只是位于 0。

谁能建议为什么?

0 投票
3 回答
746 浏览

.net - 生成 .NET 后台工作程序

我们正在开发一个 Windows 应用程序,该应用程序必须定期启动可能需要一些时间的操作。我们已经进入了让这些操作在 BackgroundWorker 上运行的模式,并为每个操作编写一个快速 WinForm,在其中您将必要的参数传递给表单,表单连接 BackgroundWorker 并进行函数调用,并且表单显示输出(进度条移动,文本填充更新等)。

现在很明显,这种形式非常千篇一律。表单副本之间真正不同的唯一部分是在哪个对象上调用哪个方法。所以我们想做的是让它成为通用的,这样我们就可以采用形式,传入一个对象(或 null 用于静态调用?),一个函数名和一个参数数组,然后让它“运行”从那里。我们已经能够通过反射做到这一点。在这种情况下,我们不喜欢反射的地方是缺乏强类型;诸如拼写错误的方法调用之类的事情在运行时被捕获,而不是编译时。现在有什么可用的东西可以使它更加优雅和健壮吗?我听说有人在谈论诸如代表和表达式树之类的东西;但我不确定前者是否适用,但我对后者仍然有些不知所措。

0 投票
1 回答
1271 浏览

c# - impersonation and BackgroundWorker

I have a little bit of a problem when trying to use the BackgroundWorker class with impersonation. Following the answers from Google, I got this code to impersonate

It worked really well until I used it with the BackgroundWorker class. In this case, I've added a impersonation in the the code that runs asynchronously. I have no errors, but the issue I'm having is that the impersonation does not work when it is used in the async method.

In code this looks something like this:

  • instantiate a BGWorker, and add an event handler to the DoWork event:

    /li>
  • in the above handler, a impersonation is made before running some code.

    /li>
  • the code is launched with

    /li>

As I said before, no error is thrown, only that the code acts as if I didn't run any impersonation, that is with its default credentials.

Moreover, the impersonation method returns true, so the impersonation took place at a certain level, but probably not on the current thread.

This must happen because the async code runs on another thread, so there must be something that needs to be added to the MyImpersonation class. But what? :)

0 投票
6 回答
2972 浏览

c# - BackgroundWorker 和线程

使用两者来完成给定任务的优点和缺点是什么。

百万美元的问题是使用哪一个以及何时使用?

非常感谢。