【发布时间】:2013-07-26 00:33:34
【问题描述】:
我几乎每天都使用后台工作人员,而且效果很好。今天我遇到了一个实例,虽然我需要将我的后台工作人员放在一个单独的项目中,然后是我正在运行的那个项目,因为我需要在我的解决方案中的两个不同项目中使用这个类。当我在 winforms 表单上测试编码时,它可以完美运行,在后台线程上处理我的编码。当我尝试从外部项目中引用此类时,我的所有编码似乎都运行得很好,但它似乎没有在后台线程上做任何事情,导致我的主窗口锁定。
有什么办法可以解决这个问题/在外部类中 ASYNC 调用的最佳做法是什么。
注意,我基本上创建了一个你称之为 start 的类,当数据准备好时会触发一个事件,所以我的外部项目并不是在等待方法完成。
提前致谢
我的例子
Solution ABC 有两个项目。项目 A 和项目 B。项目 A 是我的 WPF 应用程序,而 B 是我的 DLL。在项目 A 里面我有
Dim SmartCardData as new Solution.B()
SmartCardData.Start()
Project B has a sub
Public Sub Start()
worker.workerConnect.RunWorkerAsync()
End Sub
Private Sub workerConnect_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles workerConnect.DoWork
'loop 10 seconds connecting to my device
e.Result = true
End Sub
Private Sub workerConnect_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles workerConnect.RunWorkerCompleted
RaiseEvent Scanner_Connected()
End Sub
(抱歉,我无法将我的编码显示为代码,而不是纯文本)
【问题讨论】:
-
您的外部项目是基于表单还是控制台?此外,您可以在调试器中查看线程和调用堆栈,这将有助于您了解外部应用的运行时行为。
-
外部项目是一个 COM 对象,这绝对是锁定我的编码的原因。我正在寻找一种解决方案来调用 COM 对象上的方法,该方法现在不会锁定我,但运气不佳
标签: c# vb.net multithreading backgroundworker