...
Thread s = new Thread(new ThreadStart(ThreadAddDb("","","")));
s.Start ();
...
private static void ThreadAddDb(string ctype,string path,string name) 
{
}
我如上所示写的,但是却提示,应输入方法名称,不知道哪里错了?

解决方案 »

  1.   

    string ctype,path,name;
    --------------Thread s = new Thread(new ThreadStart(ThreadAddDb()));
    s.Start ();
    ...
    private static void ThreadAddDb() 
    {
    }
      

  2.   

    你的ThreadAddDb函数的签名和ThreadStart委托的定义的函数签名不一样,所以报错。ThreadStart这是一个无参数的签名。
      

  3.   

    ThreadStart 委托既没有参数也没有返回值。这意味着不可以使用需要参数的方法启动线程,或从方法中获得返回值。 
    为向线程传递数据,需要创建一个用来保持数据和线程方法的对象,如下面的两个代码示例所示。 
    为检索线程方法的结果,您可以使用回调方法,如第二个代码示例中所示。 
    [C#]
    using System;
    using System.Threading;// The ThreadWithState class contains the information needed for
    // a task, and the method that executes the task.
    //
    public class ThreadWithState {
        // State information used in the task.
        private string boilerplate;
        private int value;    // The constructor obtains the state information.
        public ThreadWithState(string text, int number) {
            boilerplate = text;
            value = number;
        }
               
        // The thread procedure performs the task, such as formatting 
        // and printing a document.
        public void ThreadProc() {
            Console.WriteLine(boilerplate, value); 
        }
    }// Entry point for the example.
    //
    public class Example {
        public static void Main() {
            // Supply the state information required by the task.
            ThreadWithState tws =
                new ThreadWithState("This report displays the number {0}.", 42);
            // Create a thread to execute the task, and then
            // start the thread.
            Thread t = new Thread(new ThreadStart(tws.ThreadProc));
            t.Start();
            Console.WriteLine("Main thread does some work, then waits.");
            t.Join();
            Console.WriteLine("Independent task has completed; main thread ends.");  
        }
    }
    用回调方法检索数据
    下面的示例演示了一个从线程中检索数据的回调方法。包含数据和线程方法的类的构造函数也接受代表回调方法的委托;在线程方法结束前,它调用该回调委托。
    [C#]
    using System;
    using System.Threading;// The ThreadWithState class contains the information needed for
    // a task, the method that executes the task, and a delegate
    // to call when the task is complete.
    //
    public class ThreadWithState {
        // State information used in the task.
        private string boilerplate;
        private int value;
        // Delegate used to execute the callback method when the
        // task is complete.
        private ExampleCallback callback;    // The constructor obtains the state information and the
        // callback delegate.
        public ThreadWithState(string text, int number, 
                       ExampleCallback callbackDelegate) 
        {
            boilerplate = text;
            value = number;
            callback = callbackDelegate;
        }
        
        // The thread procedure performs the task, such as
        // formatting and printing a document, and then invokes
        // the callback delegate with the number of lines printed.
        public void ThreadProc() {
            Console.WriteLine(boilerplate, value);
            if (callback != null)
                callback(1);
        }
    }// Delegate that defines the signature for the callback method.
    //
    public delegate void ExampleCallback(int lineCount);// Entry point for the example.
    //
    public class Example {
        public static void Main() {
            // Supply the state information required by the task.
            ThreadWithState tws = new ThreadWithState(
                "This report displays the number {0}.",
                42,
                new ExampleCallback(ResultCallback)
            );        Thread t = new Thread(new ThreadStart(tws.ThreadProc));
            t.Start();
            Console.WriteLine("Main thread does some work, then waits.");
            t.Join();
            Console.WriteLine("Independent task has completed; main thread ends."); 
        }    // The callback method must match the signature of the
        // callback delegate.
        //
        public static void ResultCallback(int lineCount) {
            Console.WriteLine("Independent task printed {0} lines.", lineCount);  
        }
    }