如何解决VB.NET:线程连接永远不会返回?
我的问题是在 WCF 服务中(在网络调用中)线程不会返回。不幸的是,在未执行 join 方法后,我没有得到任何函数或代码的返回值。 WCF 服务本身具有创建线程的 Web 界面,因为在那里激活了 TreeView 和 AllowDrop 的表单稍后会返回错误:
str_sql = "select id_product from ps_product where reference = '" + makat + "';"
str_sql = str_sql.replace('"\"',"")
productID = get_productId(str_sql)
if (productID == 'error' or productID == 'None'):
errorReason = "product don't exsits in DB"
print("error: product don't exsits in DB - ",productName,",makat)
另一方面,如果我启动了一个示例项目“WindowsApp56”(没有 WCF 服务),Form1 将被 ClassLibrary7 打开,并且根据 join 方法的代码被激活。现在显示“就绪”消息框。
当线程没有返回时,Web 服务不会抛出任何错误。
WindowsApp56 项目:
System.InvalidOperationException: "DragDrop registration failed"
ThreadStateException: STA mode (Single Thread Apartment) must be set for the current thread before OLE calls can be made. Make sure that the main function is marked with STAThreadAttribute.
ClassLibrary7:
Imports System.Threading
Imports ClassLibrary7
Public Class Form1
Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
Dim tmp As New Class1
Dim myobject As System.Threading.Thread = New Thread(New ThreadStart(AddressOf tmp.Main))
myobject.TrySetApartmentState(ApartmentState.STA)
myobject.Name = "Tester1"
myobject.Start()
If myobject.ThreadState <> ThreadState.Unstarted Then
myobject.Join()
End If
MsgBox("ready")
End Sub
End Class
线程连接方法错了吗?我如何“等待”返回值。
解决方法
根据错误消息:'在进行 OLE 调用之前,必须为当前线程设置 STA 模式(单线程单元)。确保主函数用 STAThreadAttribute 标记。'
在 Main 方法上添加 STAThreadAttribute 属性。
Public Class Class1
<STAThread()>
Public Sub Main()
Dim a As New Form1
a.ShowDialog()
End Sub
End Class
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。