【发布时间】:2014-04-14 07:34:31
【问题描述】:
我在 vb.net 中使用后台线程来连接/重新连接到设备。 它工作正常,但大约 2 小时后,程序在我的代码的以下部分引发了 stackoverflow 异常:
if connected = True then
Thread.Sleep(500)
Exit sub
endif
之后,我再次调用 Sub。
我知道,我可以将睡眠时间设置为例如1000 毫秒,但我认为这不是最好的解决方案...... “后台工作人员”(使用视觉工作室)会是更好的解决方案/解决我的问题吗? 或者是否有清理堆栈的可能性?
感谢您的帮助!
编辑:
Module connection
Public Sub connect()
connect_loop()
connect()
End Sub
Public sub connect_loop()
if connected = True Then
**HERE IS WHERE THE EXCEPTION IS THROWN**
Thread.Sleep(500)
Exit Sub
Endif
'Code for the Connection (ping, open Socket etc.)....
End Sub
结束模块
模块从我的主程序作为后台线程启动:
Public background As New Thread(AddressOf connection.connect)
background.IsBackground = True
background.Start()
您需要连接代码吗?我这里没有写,因为在真正的连接部分没有抛出异常。此外,2 小时一切正常。
【问题讨论】:
-
我们需要更多信息/代码来更好地了解问题所在:无论如何我认为解决方案可能不是清理堆栈(永远不是解决方案),您需要了解什么正在堆积到堆栈中并从根本上解决问题
-
运行一个子程序,完成它,然后再次运行相同的程序会导致堆栈溢出,这并没有什么特别的原因。我认为您的问题出在其他地方,在您没有向我们展示的代码中。
-
我添加了更多代码。这足够了吗,还是您需要更多详细信息?
标签: vb.net multithreading stack-overflow background-thread