2016-01-06 94 views
1

我想创建一个控制台应用程序,它将为四个函数创建四个线程,然后获取函数将返回的内容。线程1必须计算一个用随机数填充的数组的总和并返回它,线程2计算同一数组的产品并将其返回,线程3创建并返回一个-1000,1000之间的随机整数,第四个取和,产品和x(随机数),比较它们并显示谁比谁更大。C#:设置线程和获取函数返回值

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

    namespace threadsproject 
    { 
     class Program 
     { 
      public int thread1(int [] a, int n) 
      { 
       int i = n; 
       int sum = 0; 
      for (int j = 0; j < i; j++) 
      { 
       sum = a[j] + sum; 
      } 
      Console.WriteLine("\nThe sum is: "); 
      return sum; 
     } 
      public int thread2(int[] a, int n) 
      { 
     int prod = 1; 
     for (int j = 0; j < n; j++) 
     { 
      prod = a[j] * prod; 
     } 
     Console.WriteLine("\nThe product is: "); 
     return prod; 
    } 
    public int thread3() 
    { 
     Random rnd = new Random(); 
     int x; 
     x = rnd.Next(-1000, 1000); 
     Console.WriteLine("\nYour random number is: {0}", x); 
     return x; 
    } 
    public void thread4(int sum, int prod, int x) 
    { 
     Console.WriteLine("\n"); 
     if (sum < prod && prod < x) 
     { 
      Console.WriteLine("T1,T2,T3"); 
     } 
     else if (sum < x && x < prod) 
     { 
      Console.WriteLine("T1,T3,T2"); 
     } 
     else if (x < sum && sum < prod) 
     { 
      Console.WriteLine("T2,T1,T3"); 
     } 
     else if (x < prod && prod < sum) 
     { 
      Console.WriteLine("T2,T3,T1"); 
     } 
     else if (prod < sum && sum < x) 
     { 
      Console.WriteLine("T3,T1,T2"); 
     } 
     else if(prod < sum && sum == x) 
     { 
      Console.WriteLine("T3,T1=T2"); 
     } 
     if (sum < prod && prod == x) 
     { 
      Console.WriteLine("T1,T2==T3"); 
     } 
     else 
      Console.WriteLine("T3,T2,T1"); 
    } 

    static void Main(string[] args) 
    { 
     Random rnd = new Random(); 
     string s; 
     int n; 
     int [] numbers = null; 
     Console.WriteLine("Give the size of the array: "); 
     s = Console.ReadLine(); 
     n = int.Parse(s); 
     for(int i=0; i<n; i++) 
     { 
      numbers[i] = rnd.Next(-100, 100); 
     } 

     int sum, prod, x; 

     Thread mythread1 = new Thread(delegate() { thread1(numbers, n); }); 
     Thread mythread2 = new Thread(delegate() { thread2(numbers, n); }); 
     Thread mythread3 = new Thread(() => thread3()); 
     Thread mythread4 = new Thread(delegate() { thread4(sum, prod, x); }); 

     mythread1.Start(); 
     mythread2.Start(); 
     mythread3.Start(); 
     mythread4.Start(); 
    } 
} 

}

所以,当我创建的线程,我得到了同样的错误给所有的对象引用需要非静态字段,方法或属性“threadsproject.Program.thread < 1,2,4>(int int int)'。我在Visual Studio 2013 .net 4.6上工作。在线程上没有很好的编程经验,我想帮助理解我做错了什么。在此先感谢大家!

+0

总是一个好主意,谷歌的错误信息。 –

回答

0

你需要学习C#任务TPL。

using System; 
using System.Threading; 

namespace StackOverflowConsole 
{ 
    class Program 
    { 
    private static int SUM, PROD, x; 

    public static void thread1(int[] a, int n) 
    { 
     int i = n; 
     int sum = 0; 
     for (int j = 0; j < i; j++) 
     { 
      sum = a[ j ] + sum; 
     } 
     Console.WriteLine("\nThe sum is: " + sum); 
     SUM = sum; 
    } 
    public static void thread2(int[] a, int n) 
    { 
     int prod = 1; 
     for (int j = 0; j < n; j++) 
     { 
      prod = a[ j ] * prod; 
     } 
     Console.WriteLine("\nThe product is: " + prod); 
     PROD = prod; 
    } 
    public static void thread3() 
    { 
     Random rnd = new Random(); 
     int x; 
     x = rnd.Next(-1000, 1000); 
     Console.WriteLine("\nYour random number is: {0}", x); 
     Program.x = x; 
    } 
    public static void thread4(int sum, int prod, int x) 
    { 
     Console.WriteLine("\n"); 
     if (sum < prod && prod < x) 
     { 
      Console.WriteLine("T1,T2,T3"); 
     } 
     else if (sum < x && x < prod) 
     { 
      Console.WriteLine("T1,T3,T2"); 
     } 
     else if (x < sum && sum < prod) 
     { 
      Console.WriteLine("T2,T1,T3"); 
     } 
     else if (x < prod && prod < sum) 
     { 
      Console.WriteLine("T2,T3,T1"); 
     } 
     else if (prod < sum && sum < x) 
     { 
      Console.WriteLine("T3,T1,T2"); 
     } 
     else if (prod < sum && sum == x) 
     { 
      Console.WriteLine("T3,T1=T2"); 
     } 
     if (sum < prod && prod == x) 
     { 
      Console.WriteLine("T1,T2==T3"); 
     } 
     else 
      Console.WriteLine("T3,T2,T1"); 
    } 

    static void Main(string[] args) 
    { 
     Random rnd = new Random(); 
     string s; 
     int n; 

     Console.WriteLine("Give the size of the array: "); 
     s = Console.ReadLine(); 
     n = int.Parse(s); 

     int[] numbers = new int[ n ]; 

     for (int i = 0; i < n; i++) 
     { 
      numbers[ i ] = rnd.Next(-100, 100); 
     } 

     Thread mythread1 = new Thread(delegate() { thread1(numbers, n); }); 
     mythread1.Start(); 

     Thread mythread2 = new Thread(delegate() { thread2(numbers, n); }); 
     mythread2.Start(); 

     Thread mythread3 = new Thread(() => thread3()); 
     mythread3.Start(); 

     mythread1.Join(); 
     mythread2.Join(); 
     mythread3.Join(); 

     Thread mythread4 = new Thread(delegate() { thread4(SUM, PROD, x); }); 
     mythread4.Start(); 
     mythread4.Join(); 

     Console.ReadLine(); 
    } 
} 
} 
0

你需要声明你的线程函数为静态functions.your线程调用内部的静电主要方法非静态函数