一千萬個為什麽

搜索

如何在帶有aruguments的線程中調用該方法並返回一些值

我喜歡在帶有aruguments的線程中調用該方法,並在此返回一些值示例

class Program
    {
        static void Main()
        {
            Thread FirstThread = new Thread(new ThreadStart(Fun1));
            Thread SecondThread = new Thread(new ThreadStart(Fun2));
            FirstThread.Start();
            SecondThread.Start();        


        }
        public static void Fun1()
        {
            for (int i = 1; i <= 1000; i++)
            {
                Console.WriteLine("Fun1 writes:{0}", i);
            }
        }
        public static void Fun2()
        {
            for (int i = 1000; i >= 6; i--)
            {
                Console.WriteLine("Fun2 writes:{0}", i);
            }
        }

    }

我知道上面的例子運行成功,但如果方法fun1像這樣

public int fun1(int i,int j)
{
    int k;
    k=i+j;
    return k;
}

那怎麽能在線程中調用它。是否有可能。我的身體幫助......我需要一切可能的方法

最佳答案

您應該能夠使用匿名方法或lambda來提供完整的靜態檢查:

Thread FirstThread = new Thread(() => Fun1(5, 12));

或者如果你想對結果做些什麽:

Thread FirstThread = new Thread(() => {
    int i = Fun1(5, 12);
   //do something with i
});

但請註意,這個“做某事”仍然在新線程的上下文中運行(但是可以訪問外部方法中的其他變量( Main ),這是由“捕獲的變量”提供的)。

如果你有C#2.0(而不是上面),那麽:

Thread FirstThread = new Thread((ThreadStart)delegate { Fun1(5, 12); });

Thread FirstThread = new Thread((ThreadStart)delegate {
    int i = Fun1(5, 12);
   //do something with i
});

轉載註明原文: 如何在帶有aruguments的線程中調用該方法並返回一些值