对线程的一点点新理解

在开发一个提示框功能时,遇到如何在类的各个方法中使用同一线程的问题。经过思考和实验,发现只要在线程内创建类实例,该类的所有方法默认都在该线程上下文中执行。通过编写简单程序并测试,验证了这一假设。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个提示框,要用到线程,遇到的问题是不知道怎么在一个类中用同一个线程来调用所有方法。

后来想,是不是只要在线程中创建了这个类,那这个类里的所有原生的东西都属于这个线程。

于是写了个简单的程序试了下:

    public class Class1
    {
        public void Method1()
        {
            Console.WriteLine("{0} - {1} - {2}",
                "Class1",
                "Method1",
                Thread.CurrentThread.ManagedThreadId);
        }

        public void Method2()
        {
            Console.WriteLine("{0} - {1} - {2}",
                "Class1",
                "Method2",
                Thread.CurrentThread.ManagedThreadId);
        }

        public void Method3()
        {
            Console.WriteLine("{0} - {1} - {2}",
                "Class1",
                "Method3",
                Thread.CurrentThread.ManagedThreadId);
        }
    }

    public class Class1Caller
    {
        public void CallClass1()
        {
            Task.Factory.StartNew(
                delegate
                {
                    Console.WriteLine("{0} - {1} - {2}",
                        "Class1Caller",
                        "CallClass1",
                        Thread.CurrentThread.ManagedThreadId);
                    Class1 c1 = new Class1();
                    c1.Method1();
                    c1.Method2();
                    c1.Method3();
                });
        }
    }

    public class Class2
    {
        public void CallClass2()
        {
            this.Method1();
            this.Method2();
            this.Method3();
        }

        private void Method1()
        {
            Task.Factory.StartNew(
                delegate
                {
                    Console.WriteLine("{0} - {1} - {2}",
                        "Class2",
                        "Method1",
                        Thread.CurrentThread.ManagedThreadId);
                });
        }

        private void Method2()
        {
            Task.Factory.StartNew(
                delegate
                {
                    Console.WriteLine("{0} - {1} - {2}",
                        "Class2",
                        "Method2",
                        Thread.CurrentThread.ManagedThreadId);
                });
        }

        private void Method3()
        {
            Task.Factory.StartNew(
                delegate
                {
                    Console.WriteLine("{0} - {1} - {2}",
                        "Class2",
                        "Method3",
                        Thread.CurrentThread.ManagedThreadId);
                });
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Class1Caller c1c = new Class1Caller();
            Class2 c2 = new Class2();

            c1c.CallClass1();
            c2.CallClass2();

            Console.ReadLine();
        }
    }


测试结果:



证明我的设想是正确的。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值