【发布时间】:2012-01-17 04:06:31
【问题描述】:
我有两个关于使用 BackgroundWorker 的问题:
1) 假设您有函数 A 和函数 B。函数 A 创建一个运行函数 B 的 BackgroundWorker。因此 BackgroundWorker 现在在单独的线程上运行函数 B。函数 B 是一个无限循环,我打算长时间运行。函数A通过BackgroundWorker使用后,返回。那么现在启动BackgroundWorker(Function A)的函数已经返回,BackgroundWorker线程是否继续在后台运行?或者它是否停止运行函数 B,因为实例化它的函数已经返回?如果它确实停止了,我该如何让它即使在函数 A 返回后函数 B 也能继续运行?
2) 我需要从 BackgroundWorker 创建的单独线程访问窗口窗体项(即文本框)。但是,如果我尝试从非主线程访问窗口窗体项,则会出现跨线程错误。如何从单独的线程安全地访问窗口窗体项?我基本上需要不断地从一个单独的线程更新一个文本框。我知道 BackgroundWorker 有一个名为“RunWorkerCompleted”的成员,该成员在 BackgroundWorker 完成其工作后运行。它允许我从中访问窗口窗体项。但是,我需要在线程执行期间而不是在线程完成之后访问窗口窗体项。我怎样才能通过线程安全地访问这些?如果这不可能,还有哪些其他可能的解决方案?
【问题讨论】:
标签: c# windows multithreading