【发布时间】:2011-11-28 14:52:40
【问题描述】:
我有一个用于 UML 建模产品的 C# 插件,它可以自动绘制图表并对其进行维护。我正在处理具有 6000 多个图表的更大规模的企业模型。这需要很长时间(即使在更快的机器上)。所以我创建了一个版本,它使用后台工作线程来运行作业的“批处理”部分,而“前台”有一个模态对话,允许我提前停止处理。否则,由于建模程序的 UI,我无法将“STOP”消息发送到加载项。
后台版本的时间似乎是单线程版本的两倍。实际上,我期望后台工作线程版本是多线程的,但从我所能做的探测来看,它实际上并没有在单独的线程中运行。
模态对话框和加载项正确通信,因此这两个功能似乎位于不同的线程上。批处理通过 DoWork 方法在 .RunWorkerAsync() 下运行。但是,如果我在代码中放置跟踪,他们会报告没有在单独的线程上运行(因为 .Invoke Required 设置为 false)。
我预计会有少量开销,但不会这么多 (100%)。
发生了什么事?我应该转向真正的多线程(而不是 BackgroundWorker)吗?
TIA, 保罗
【问题讨论】:
-
BackgroundWorker 在这里应该没问题。我们需要查看一些代码才能在这里找到您的问题。
标签: c# multithreading backgroundworker