【问题标题】:how to run process in background in .net using c#如何使用c#在.net中后台运行进程
【发布时间】:2010-02-04 06:43:05
【问题描述】:

我必须使用线程和后台工作程序在后台运行进程。这个过程执行从数据库中检索数据的任务,它检索成功,因为我无法将该数据显示到 datagridview 中,出现一些数据错误事件。

【问题讨论】:

  • 您收到什么异常消息?
  • @haresh chande:你应该做的第一件事是搜索 SO 和其他地方并比较如何使用 backgroundworker 类的示例......
  • 你使用的是哪个框架?
  • 要更新用户界面,你需要在主线程上。大多数语言都是这种情况。这可以防止 UI 被后台线程“踩到”。在 datagridview 的容器中添加一个方法,该方法将获取背景数据并更新 UI 并在主 ui 线程中的对象方法上调用该方法,从而聚合您的数据到后台最容易遍历的结果,并且在 UI 线程上的时间尽可能短。

标签: c# .net process background


【解决方案1】:

BackgroundWorker 有一个内置的回调方法RunWorkerCompleted,您可以连接到它,它会自动处理跨线程封送处理到 UI 线程。在调用RunWorkerAsync 之前,您可以连接到RunWorkerCompleted 事件。

backgroundWorker1.RunWorkerCompleted += 
                new RunWorkerCompletedEventHandler(
            backgroundWorker1_RunWorkerCompleted);

backgroundWorker1_RunWorkerCompleted 中,您可以绑定网格或将 DataSource 属性设置为 DataTable,它将位于 UI 线程上。

如果您已经完成此操作并且遇到错误,则可能只是 DoWork/线程代码本身中未处理的异常。如果是这种情况,请将 RunWorkerAsync 调用包装在 try catch 中,看看会得到什么。

希望对您有所帮助...

【讨论】:

    【解决方案2】:

    可能是您无法修改 DataGridView 控件。 放 CheckForCrossThreadcalls = 假 ,它可能有效

    【讨论】:

    • 这不是一个好建议。该设置用于提醒开发人员他们做错了什么。您的建议基本上与告诉某人如果他们的烟雾探测器熄灭,只需取出电池并重新睡觉即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2011-02-10
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多