【发布时间】:2013-05-19 11:31:40
【问题描述】:
我们正在使用后台工作线程 (C#.net) 在 Windows 应用程序(使用 .net 3.5 开发)中异步执行一些任务 ....注册了 Do_Work 事件(由 Windows 计时器通过调用 RunWorkerAsync 调用),这使得 Web 服务调用来获取数据。有了这个我们发现,每当 Do_Work 为获取数据而触发时,主线程的处理都会出现延迟。例如
场景 1: 当 Do_Work 事件未触发时,主线程在 2-3 秒内打开表单
场景 2: 触发 Do_Work 事件时,主线程在 5-8 秒内打开表单
注意: 1.主线程、后台工作人员(Do_Work)都调用webservice来获取数据 2.Background worker任务完全独立于主线程任务 3.我们只使用多核机......
任何帮助都是可观的,谢谢
【问题讨论】:
-
请贴出代码。
-
您可以在创建新线程后尝试分拆新线程。这就像执行后台进程的主线程 > 新线程 > 线程集合。并且不要在主线程中调用wait来等待,直到所有线程都完成。
-
这将取决于机器架构。这是多核机器吗?您是否正在从后台工作人员更新 UI?如果是这样,您请求 UI 线程执行操作 - 这会减慢 UI 线程上发生的其他操作(例如打开其他表单)。
-
“windows timer invoked by calling
RunWorkerAsync”是什么意思? -
我在 MSDN 上看到了这段代码:
Do While BackgroundWorker1.isBusy() Application.DoEvents Loop我知道这是 VB.NET 代码,但我认为将它移植到 C# 非常容易。希望这会有所帮助......虽然没有一些代码很难说出真正的问题......
标签: c# multithreading backgroundworker