如何删除单独的工作线程函数并创建一个线程

时间:2011-08-13 16:47:30

标签: c# multithreading

这是传统的线程创建代码:

        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();
        }

或者可能吗?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

@Cameron的回答似乎是一个很好的主意但如果在.net 3.5上你可以使用线程池代替:

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

另外,如果你真的想要创建一个新线程,你可以这样做:

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

答案 2 :(得分:1)

听起来你只对语法增强感兴趣? BackgroundWorker非常友好。

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

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