首页 文章

创建一个新的Thread()会将ParameterizedThreadStart对象作为C sharp中的参数

提问于
浏览
1

啊我在线程编程中非常棒,只是开始创建多个线程的基本步骤,所以我用Google搜索并获得了一些关于在c#中创建Thread的片段,这里是我发现的片段:

public MyThread(string name) { 
    count = 0; 
    thrd = new Thread(new ThreadStart(this.run)); // here m getting error
    thrd.Name = name; 
    thrd.Start(); 
  } 

  // Entry point of thread. 
  void run() { 
    Console.WriteLine(thrd.Name + " starting."); 

    do { 
      Thread.Sleep(500); 
      Console.WriteLine("In " + thrd.Name + 
                        ", count is " + count); 
      count++; 
    } while(count < 10); 

    Console.WriteLine(thrd.Name + " terminating."); 
  } 
}

错误是 The best overloaded method match for System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart) has some invalid arguments

为什么Thread构造函数要求我提供ParameterizedThreadStart对象,我希望传递简单的ThreadStart对象 .

另一件事是ThreadStart类没有带有1个参数的构造函数,即它需要0个参数,但在片段中它们显示了 new ThreadStart(this.run) 这个?使用C#2008

这是完整的代码

using System; 
using System.Threading; 

class MyThread { 
  public int count; 
  public Thread thrd; 

  public MyThread(string name) { 
    count = 0; 
    thrd = new Thread(new ThreadStart(this.run)); 
    thrd.Name = name; 
    thrd.Start(); 
  } 

  // Entry point of thread. 
  void run() { 
    Console.WriteLine(thrd.Name + " starting."); 

    do { 
      Thread.Sleep(500); 
      Console.WriteLine("In " + thrd.Name + 
                        ", count is " + count); 
      count++; 
    } while(count

3 回答

  • 2

    不知道为什么它不起作用,但你可以尝试:

    thrd = new Thread(run);
    

    run 方法组到 ThreadStart 委托的转换是隐式的 .

    我怀疑你在 System.Threading.ThreadStart 和代码中其他地方定义的另一种类型之间存在名称冲突...尝试将插入符号放在 ThreadStart 并按F12转到声明

  • 2

    我已经完成了你给我们的不完整的例子,我没有遇到相同的编译器错误 .

    class Program
    {
        static int count;
        static Thread thrd;
    
    
        public static void MyThread(string name) { 
            count = 0; 
            thrd = new Thread(new ThreadStart(run)); // here m getting error
            thrd.Name = name; 
            thrd.Start(); 
        } 
    
      // Entry point of thread. 
      static void  run() { 
        Console.WriteLine(thrd.Name + " starting.");
    
        do
        {
            Thread.Sleep(500);
            Console.WriteLine("In " + thrd.Name +
                              ", count is " + count);
            count++;
        } while (count == 5);
      }
    
    
    
      static void Main(string[] args)
      {
      }
    }
    
  • 2

    这应该是绝对正常的,因为有an overloadThreadStart 而不是 ParameterizedThreadStart .

    我怀疑这里还有其他的东西......你能提供一个简短而完整的例子来证明这个问题吗?

    除了缺少类声明本身和变量声明之外,您的代码为我编译没有问题:

    using System;
    using System.Threading;
    
    class MyThread {
    
        int count;
        Thread thrd;
    
        public MyThread(string name) { 
            count = 0; 
            thrd = new Thread(new ThreadStart(this.run)); // here m getting error
            thrd.Name = name; 
            thrd.Start(); 
        } 
    
        // Entry point of thread. 
        void run() { 
            Console.WriteLine(thrd.Name + " starting."); 
    
            do { 
                Thread.Sleep(500); 
                Console.WriteLine("In " + thrd.Name + 
                                  ", count is " + count); 
                count++; 
            } while(count < 10); 
    
            Console.WriteLine(thrd.Name + " terminating."); 
        } 
    }
    

相关问题