在 c# 控制台应用程序中的 2 个线程之间传递变量(这里是新手)

Passing variables between 2 threads in a c# console application (newbie here)

我想知道如何在 C# 控制台应用程序中将变量从一个线程发送到另一个线程。例如,

using System;
using System.Threading;

namespace example
{
    class Program
    {
        static void Main(string[] args)
        {
            int examplevariable = Convert.ToInt32(Console.ReadLine ());
            Thread t = new Thread(secondthread);
            t.Start();

        }

    static void secondthread()
    {
        Console.WriteLine(+examplevariable);
    }
}
}

我想让"secondthread"认识"examplevariable"。

实现此目的的一种简单方法是在 class 上定义一个静态变量,并将从控制台读取的值赋给该静态变量,但可能并非在所有情况下都适用。像这样:

class Program
{

    static int examplevariable;

    static void Main(string[] args)
    {
        examplevariable = Convert.ToInt32(Console.ReadLine ());
        Thread t = new Thread(secondthread);
        t.Start();

    }

    static void secondthread()
    {
        Console.WriteLine(+examplevariable);
    }

此外,请参阅有关如何将参数传递给线程的问题:

ThreadStart with parameters

Thread.Start() 有一个以参数作为对象的重载。您可以将您的主线程变量传递给它并将其转换为您的变量类型

    using System;
    using System.Threading;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int examplevariable = Convert.ToInt32(Console.ReadLine());
                Thread t = new Thread(secondthread);
                t.Start(examplevariable);
            }

            static void secondthread(object obj)
            {
                int examplevariable = (int) obj;
                Console.WriteLine(examplevariable);
                Console.Read();
            }

        }
    }

如果你想传递多个变量,那么使用模型 class 并使用 属性 绑定,如下所示

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            TestModel tm = new TestModel();
            tm.examplevariable1 = Convert.ToInt32(Console.ReadLine());
            tm.examplevariable2 = Console.ReadLine();
            Thread t = new Thread(secondthread);
            t.Start(tm);
        }

        static void secondthread(object obj)
        {
            TestModel newTm = (TestModel) obj;
            Console.WriteLine(newTm.examplevariable1);
            Console.WriteLine(newTm.examplevariable2);
            Console.Read();
        }

    }

    class TestModel
    {
        public int examplevariable1 { get; set; }
        public string examplevariable2 { get; set; }

    }
}

希望这会有所帮助