C#错误“方法名称超出”我在做什么错

时间:2018-10-17 17:23:13

标签: c#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace Exercise4
{
    class MainClass
    {
        private char c;

        public MainClass(char c)
        {
            this.c = c;
        }

        public void run()
        {
            while (true)
            {
                Console.WriteLine(c);
                System.Threading.Thread.Sleep(1000);
            }
        }

        public static void Main(string[] args)
        {
            Thread thA = new Thread(new ThreadStart(new MainClass('A'), run)); //Error Method Name Excepted : Error Code CS0149
            Thread thB = new Thread(new ThreadStart(new MainClass('B'), run)); //Error Method Name Excepted : Error code CS0149

            thA.Start();
            thB.Start();

            thA.Join();
            thB.Join();
        }
    }
}

我是C#的新手,我真的不明白那里出了什么问题。

更确切的说,错误在这里:

new ThreadStart(new MainClass('A') , run )
new ThreadStart(new MainClass('B') , run )

此代码必须创建5个线程,每个线程的第一个显示字母'A',第二个显示字母'B',依此类推。 我试图修改程序,以便每个线程在无限循环中显示其字母。

希望我可以在那里获得帮助!

3 个答案:

答案 0 :(得分:2)

您需要先初始化对象,然后才能将这些对象的run方法传递给ThreadStart

public static void Main(string[] args)
{
    var mainA = new MainClass('A');
    var mainB = new MainClass('B');
    Thread thA = new Thread(new ThreadStart(mainA.run));
    Thread thB = new Thread(new ThreadStart(mainB.run));
    ...

POST编辑:附加选项

如果只需要两个初始化对象用于此目的,则可以通过在不声明和设置其他变量的情况下,在同一行中处理初始化来使此初始化稍微优雅一些​​:

    Thread thA = new Thread(new ThreadStart(new MainClass('A').run));
    Thread thB = new Thread(new ThreadStart(new MainClass('B').run));

答案 1 :(得分:0)

如果您要调用方法run,但您应先调用run(),但先更改名称,则它不会让您调用方法while (true) { Console.WriteLine(c); System.Threading.Thread.Sleep(1000); } 。也

boolean

由于您使用的是值而不是实际的while,因此这始终是正确的,而while使它循环,这将导致StackOverflow。将if更改为{{1}}仅打印一次

答案 2 :(得分:0)

这只是您尝试实例化 MainClass 对象并执行新线程内不正确的 run 函数的方法。

您可以通过如下修改“ public static void Main ”来使代码正常工作:

public static void Main(string[] args)
        {
            MainClass A = new MainClass('A');
            Thread thA = new Thread(new ThreadStart(A.run));


            MainClass B = new MainClass('B');
            Thread thB = new Thread(new ThreadStart(B.run));

            thA.Start();
            thB.Start();

            thA.Join();
            thB.Join();

            System.Console.ReadKey();
        }