2012-09-06 95 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)而超時,但該線程應該保留。 –