2013-05-11 77 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