C#: ThreadStart中不能使用匿名委托吗?

5

我能否使用匿名委托声明,类似于以下内容:

    ThreadStart starter = delegate() { go(); };
            ...

    static void go()
    {
      Console.WriteLine("Nice Work");
    }

   // (or)

   ThreadStart starter=delegate() { Console.WriteLine("Hello");}

是的,看起来还不错。你具体遇到了什么问题? - David Seiler
代码中是否还有使用匿名委托的地方?我在想这段代码是否不是针对 .NET Framework v1.x... - Chris Shouts
1
你为什么认为这是不可能的?我已经让这段代码工作了。唯一的问题是你试图从非 UI 线程操作用户界面(Console.Writeline),这是不允许的。 - Dabblernl
@Dabblernl Console类的所有成员都是线程安全的。 - Jesper Palm
1
@Dabblernl 从与运行入口点的线程不同的线程调用Console.WriteLine()是完全合法的。另外,根据paper1337的问题,您的目标框架版本是哪个? - user153498
显示剩余2条评论
3个回答

7
您可以跳过 ThreadStart。这应该是有效的。
Thread t = new Thread(() => 
{
  Console.WriteLine("Hello!");
});

感觉我们正在处理一个较旧的 .net 版本。如果是这种情况,这将无法工作。 - Jesper Palm

4

你遇到了什么错误?是缺少分号吗?这段代码可以编译通过。

    static void go()
    {
        Console.WriteLine("Nice Work");
    }

    public void Run()
    {
        ThreadStart starter1 = delegate() { go(); };

        ThreadStart starter2 = delegate() { Console.WriteLine("Hello");};

        ThreadStart starter3 = () =>  Console.WriteLine("Hello");

    }

无法将匿名方法转换为ThreadStart类型。我正在使用ASp.NET 3.5和C# 3.0。只是编译您提供的相同示例。 - user186973
你是否已经包含了 using System.Threading?错误信息中还有其他文本吗? - Cheeso
就像你所说的一样,我漏写了分号,现在已经没问题了。非常感谢你。 - user186973

1

可以的。你实际的问题是什么?

顺便提一下,你第二个例子末尾缺少一个分号:

ThreadStart starter=delegate() { Console.WriteLine("Hello");}

应该是:

ThreadStart starter = delegate { Console.WriteLine("Hello"); };

虽然我添加的间距是个人选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接