【问题标题】:background worker blocking main thread .net [closed]后台工作者阻塞主线程.net [关闭]
【发布时间】: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


【解决方案1】:

我们可以通过在客户端配置文件中应用以下设置来解决问题..

参考 .... blogs.msdn.com/b/darrenj/archive/2005/03/07/386655.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多