2013-05-11 78 views
0

我真的不喜歡必須創建委託來提供線程功能。如果我當前正在使用方法A進行工作,但後來認識到最好在線程中運行,現在我必須創建一個委託和另一個方法來實際運行線程。所以現在我有一個方法啓動線程,然後通過委託方法B在委託聲明中包裝功能的方法

我的問題是工作原理: * 我可以一個線程聲明本身內換行功能? *

喜歡的東西

System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(
       new delegate() 
       { 
      SqlConnection Connection = Helpers.ConnectionHelper.CreateConnection(); 
      SqlCommand cmd = new SqlCommand("MarkNotificationRead", Connection); 
      cmd.CommandType = CommandType.StoredProcedure; 

      cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = this.id; 

      Connection.Open(); 

      try 
      { 
       cmd.ExecuteNonQuery(); 
      } 

      catch 
      { 

      } 

      Connection.Close(); 
       }); 

我見過這樣的事情之前完成的地方,但不能再找到實例。

回答

0

你有什麼非常接近,只是輕微的語法變化 - 擺脫new,而()

System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(
      delegate 
      { 
     SqlConnection Connection = Helpers.ConnectionHelper.CreateConnection(); 
     SqlCommand cmd = new SqlCommand("MarkNotificationRead", Connection); 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.Add("@id", SqlDbType.BigInt).Value = this.id; 

     Connection.Open(); 

     try 
     { 
      cmd.ExecuteNonQuery(); 
     } 

     catch 
     { 

     } 

     Connection.Close(); 
      })); 

另一種方法是使用lambda語法,在其中您可以擺脫ThreadStart的電話:

System.Threading.Thread t = new System.Threading.Thread(
      () => 
      { 
        ... 
      }); 
+0

:D謝謝。很簡單的解決方案 – Adrian 2013-05-11 23:25:28