2014-01-21 57 views
1

首先,我知道這是不好的做法......這已經變成了更多的「需要知道」練習,然後在這一點上進行最佳練習練習。爲什麼我無法在用戶控件構造函數中啓動線程?

我有一個usercontrol從主winform的構造函數初始化。在該用戶控件,我想開始保持活躍線程

public TestControl() 
    { 
     InitializeComponent(); 

     this.Disposed += Dispose; 

     // Start the keep alive Thread 
     _keepAliveThread = new Thread(
      () => 
      { 
       while (true) 
       { 
        Thread.Sleep(60000); 
        try 
        { 
         _service.Ping(); 
         Trace.WriteLine("Ping called on the Service"); 
        } 
        catch 
        { 
         Trace.WriteLine("Ping failed"); 
        } 
       } 
      }); 
     _keepAliveThread.Start(); 
    } 

每當我做到這一點,處置不設計者內火我也不讓該事件。

只是不啓動線程,處置火災。再次...我知道這是不好的做法,但試圖弄清楚爲什麼這是行不通的。

+0

你能按你的意思是「處置不設計者內火」澄清?你如何在沒有運行的情況下檢查它?我沒有看到'Output'窗口中的任何內容表明它將從設計器中丟棄。 – Erik

回答

1

這裏是我的代碼:

public partial class SillyControl : UserControl 
{ 
    Thread backgroundThread; 
    Service service = new Service(); 

    public SillyControl() 
    { 
     InitializeComponent(); 

     this.Disposed += delegate { Trace.WriteLine("I been disposed!"); }; 

     backgroundThread = new Thread(argument => 
     { 
      Trace.WriteLine("Background ping thread has started."); 

      while (true) 
      { 
       Thread.Sleep(5000); 
       try 
       { 
        service.Ping(); 
        Trace.WriteLine("Ping!"); 
       } 
       catch (Exception ex) 
       { 
        Trace.WriteLine(string.Format("Ping failed: {0}", ex.Message)); 
       } 
      } 
     }); 

     backgroundThread.IsBackground = true; // <- Important! You don't want this thread to keep the application open. 
     backgroundThread.Start(); 
    } 
} 
+0

,似乎也沒有工作。其實,我相信語法也是不正確的。 _service期望是Thread構造函數的一個int。 – AndySousa

+0

@AndySousa我已經編輯了語法,現在進一步調查,我打開了VS。 – Erik

+0

我剛剛更新了它,現在就進行測試。處置仍然沒有得到調用,應用程序不會退出。任何其他想法? – AndySousa

相關問題