vb.NET中使用后台线程的堆栈溢出异常

vb.NET中使用后台线程的堆栈溢出异常,vb.net,multithreading,stack-overflow,background-thread,Vb.net,Multithreading,Stack Overflow,Background Thread,我正在使用vb.net中的后台线程连接/重新连接到设备。 它工作正常,但大约2小时后,程序抛出stackoverflow异常,在我的代码的以下部分: if connected = True then Thread.Sleep(500) Exit sub endif 之后,我再给潜艇打电话 我知道,我可以将睡眠时间设置为1000毫秒,但我认为这不是最好的解决方案。。。 “Backgroundworker”(使用visual studio)是更好的解决方案/解决我的问题吗? 还是有可能

我正在使用vb.net中的后台线程连接/重新连接到设备。 它工作正常,但大约2小时后,程序抛出stackoverflow异常,在我的代码的以下部分:

if connected = True then
   Thread.Sleep(500)
   Exit sub
endif
之后,我再给潜艇打电话

我知道,我可以将睡眠时间设置为1000毫秒,但我认为这不是最好的解决方案。。。 “Backgroundworker”(使用visual studio)是更好的解决方案/解决我的问题吗? 还是有可能清理烟囱

谢谢你的帮助

编辑:

端模块

该模块作为后台线程从我的主例程启动:

Public background As New Thread(AddressOf connection.connect)
background.IsBackground = True
background.Start()

您需要连接的代码吗?我没有在这里写它,因为在真正的连接部分没有抛出异常。另外,2小时后一切正常。

您的方法
connect
是递归的,在任何条件下都不会返回

对函数或方法的每次调用都会使用一些堆栈空间,而每个线程只有这么多的堆栈空间

如果你想让代码>连接< /COD>永远循环,只要使用一个无限循环(但是考虑当你想停止进程时,LoP会退出)。 那么,您不清楚明显的堆栈溢出的哪一部分?您正在递归调用

connect
,无需任何条件。它将堆栈溢出,这是有保证的。你的
Sleep()
只会延迟不可避免的事情。线程与问题无关。您可能想做一些类似循环的事情:

while(true)
 connect_loop()
end

(或while循环的VB语法)。

我们需要更多的信息/代码来更好地理解问题所在:在任何情况下,我不认为解决方案可能是清理堆栈(从来都不是解决方案),您需要了解什么会进入堆栈,并在其根位置解决问题运行子例程,完成它,然后再次运行相同的子例程,没有特别的原因会导致堆栈溢出。我认为您的问题在其他地方,在您没有向我们展示的代码中。我添加了更多的代码。这就足够了,或者你需要更多的细节吗?你的意思是,我可以启动connect()作为后台线程,在这个方法中加入一个无休止的循环?没有一直调用其他方法?谢谢!您认为使用while(true)循环会引发任何错误或异常吗?我有点害怕我的应用程序或其他东西过载?使用While(true)循环来确保我的应用程序始终处于连接状态或重新连接自身,有什么不好的地方吗?我需要睡眠计时器吗?你的意思是,我可以启动connect()作为后台线程,然后在这个方法中加入一个无休止的循环?没有一直调用另一个方法?
Public Sub connect()
   ...
   connect()
End Sub
while(true)
 connect_loop()
end