2011-08-13 38 views
0

这是传统的线程创建代码:如何删除单独的工作线程功能,并创建一个线程

 public static void Ping() 
     { 
      new Thread(workThreadPingRequest) { IsBackground = true }.Start(); 
     } 

     private static void workThreadPingRequest() 
     { 
      line1(); //Create connection 
      line2(); //Ask ping 
      line3(); //Process the reply and close connection 
     } 

我有很多对像他们一样。那么,如何删除单独的工作线程函数以使代码更容易 - 对我来说如下所示:

 public static void Ping() 
     { 
      new Thread(new Func<void> fn =() => 
       { line1(); line2(); line3();}) 
       { IsBackground = true } 
       .Start(); 
     } 

或者是否有可能?

回答

1

您是否尝试过使用.NET 4的Tasks

Task.Factory.StartNew(() => { 
    line1(); 
    line2(); 
    line3(); 
}); 
+0

是啊4.0,谁在乎线程:) –

+0

线是同步的,不是吗? –

+1

@尼姆:我不确定你的意思。匿名函数('()=> {}')将同步运行,但在单独的线程上运行。所以'line1','line2'和'line3'都会在同一个线程上一个接一个地运行。 – Cameron

1

@卡梅隆的回答似乎是一个很好的想法,但如果是在.NET 3.5,你可以使用,而不是线程池:

System.Threading.ThreadPool.QueueUserWorkItem(_ => 
    { 
     line1(); 
     line2(); 
     line3(); 
    }); 

此外,如果你真的想创建一个新的线程,而不是你能做到这一点:

new Thread(() => 
{ 
    line1(); 
    line2(); 
    line3(); 
}) { IsBackground = true }.Start(); 
+0

第二个是我的问题的答案。所有的片段也都很糟糕。 –

1

听起来像你只是对语法增强感兴趣吗? BackgroundWorker非常令人信服。

string arg = "blah..."; 
BackgroundWorker worker = new BackgroundWorker(); 
worker.DoWork += (s,e) => 
{ 
// can extract args from e 
// code here 
}; 
worker.RunAsync(args); 

这段代码不在我头顶,所以它可能并不完美,但这个想法就在那里。