2012-09-06 50 views
0

我建立一个简单的WPF应用程序。 gui有一个按钮,当按下时, 会创建一个后台线程。 websocket服务器将在这个后台线程上运行。 websocket服务器是事件驱动的。有可能是这个服务器, 低活动的周期,但我不想线程由于低容积终止。是否有一个简单的方法可以使这个线程持久化(至少在应用程序终止之前)?持久线程执行

+2

只要线程不退出,它会持续 –

+0

@PeterRitchie除非整个应用程序池被回收,其可以是列于共享主机显影剂控制。 UPD。对不起,它的作品“直到应用程序终止”。 – aiodintsov

+0

Walter,“应用程序终止前”是什么意思?如果配置如此,IIS池可按计划进行回收。您可以通过WebClient将其称为自己的保持活动状态,但要保持运行状态),但仍可能会被迫回收。 – aiodintsov

回答

1

为什么线程终止由于低量?线程只会在您告诉时终止。即使您的应用程序和表单已关闭,后台线程仍可能仍会运行。

我在线程中有一个TCPServer类(它使用TCPListener),并且由于后台线程可以在AcceptTcpClient()(这是阻塞和无限循环)中被阻塞,TCPListener必须手动关闭:

public partial class MainForm : Form 
{ 
    public TCPServer TCPServer = new TCPServer(); 
    private Thread ServerThread = null; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     ServerThread = new Thread(TCPServer.Run); 
     ServerThread.Start(); 
    } 

    private void OnApplicationExit(object sender, EventArgs e) 
    { 
     if (TCPServer.Server != null) 
      TCPServer.Server.Stop(); 
    } 
} 
+2

由于未处理的异常,线程也可以终止。 –

+0

谢谢罗姆兹(和其他人回复)。它可能会由于低音量(除非存在Keepalive)而超时,但该线程应该保留。 –