int a=0;
Thread th=new Thread(new ThreadStar(Function));
th.Start(ref a);
Function 是一个返回整数的方法。
我的目的是想通过参数传递,改变a的值,请问这样可以吗????

解决方案 »

  1.   

    你的Function定义的就不对,
    ThreadStart 委托定义是返回void的。你是返回int的。
    public delegate void ThreadStart ()Thread中也没有定义带ref参数Start()方法,所以不行
      

  2.   


                int i = 0;
                new Thread(() =>
                {
                    Thread.Sleep(10);
                    int j = Function(ref i);
                }).Start();
                Console.WriteLine(i);
                Thread.Sleep(10);
                Console.WriteLine(i);
      

  3.   


            static int Function(ref int i)
            {
                i = 10;
                return 1;
            }
      

  4.   

    这是VB代码? 能不能给我个C#代码?
      

  5.   

    若是不能用ref作为参数。那么请问大侠们  怎么得到线程调用方法的返回值。我的目的是用线程解决界面假死。不过还要得到一个返回值!!!
      

  6.   

    我初学,麻烦解释下new Thread(() =>
                {
                    Thread.Sleep(10);
                    int j = Function(ref i);
                }).Start();
    ()=> 是什么意思?
      

  7.   

    你的是什么环境?那个语法是lambda表达式,如果你的是.net framework 2.0 的话 用匿名委托代替
      

  8.   

    endinvoke()
    获取委托执行结果
      

  9.   

    补充Sandy945:
    2.0的话这么写            new Thread(
                    delegate()
                    {
                        Thread.Sleep(10);
                        int j = Function(ref i);
                    }
                ).Start();
                Console.WriteLine(i);
                Thread.Sleep(10);
                Console.WriteLine(i);
      

  10.   


    new Thread(delegate(){
                     Thread.Sleep(10);
                    int j = Function(ref i);
                }).Start();          
                 
                new Thread(() =>
                {
                    Thread.Sleep(10);
                    int j = Function(ref y);
                }).Start();
      

  11.   

    ?你 Function 函数里怎么写的?
      

  12.   

    好像找到原因了,是因为我function操作的是数据库,里面数据好几万条记录。 如果数据少则能得到结果。多的话 数据库操作的线程还没有结束 就执行 consol了。所以值没有改变。如果让主线程sleep,多少好呢?能找到一个更好的方法吗。
      

  13.   

    可以使用 AutoResetEvent 让主线程等待直至子线程处理结束。
      

  14.   


    AutoResetEvent are = new AutoResetEvent(false);
                int i = 0;
                new Thread(() =>
                {
                    Thread.Sleep(1000);
                    int j = Function(ref i);
                    are.Set();
                }).Start();
                Console.WriteLine(i);
                are.WaitOne();
                Console.WriteLine(i);
      

  15.   

    Sandy945
    (阿非 (艰难困苦,玉汝于成!))强人!!!谢谢哈~~~~~