C#在类之间传递消息

时间:2010-10-12 03:01:31

标签: c# multithreading

我对C#和多线程编程有点新意,但这里有:

我正在开发一个系统,在那里我将有一个将被实例化的类,然后等待来自另一个正在运行的类的各种消息。我应该如何捕捉和发送这些消息?

谢谢,

PM

4 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

如果您没有使用.net远程处理来在不同的appdomains之间发送对象。

简单的情节:

1-创建主类的单例对象。

2-使用Event和Delegate在类之间发送消息。

如果您需要在Appdomains之间发送消息。

1-如果Appdomain不跨越机器边界而不是使用IPC通道(.Net 2.0及更高版本)

2- IF Appdomain跨越机器边界,你可以使用.net远程处理。

答案 2 :(得分:2)

使用生产者/消费者队列。 .NET 4.0中有一个默认实现,网上有许多示例实现。根据您描述的内容,您想要的是单生产者/单一消费者队列。

一般情况下,一个线程被视为生产者并将消息写入队列。一个单独的线程(称为使用者线程)正在等待空闲,以便在队列中显示消息。这些线程如何相互协作(或不相互协作)的同步细节取决于实现。

答案 3 :(得分:2)

如果你使用的是.Net 3.5,请在一个单独的线程中运行你的发送者,并从监听器传递一个回调方法:

class Program
    {
        static void Main(string[] args)
        {
            Listener listener = new Listener();
            Sender sender = new Sender();
            sender.Send = new TalkDelegate(listener.TalkToMe);
            Thread thread = new Thread(sender.Run);
            thread.IsBackground = true;
            thread.Start();
            listener.Listen();
        }
    }

    delegate bool TalkDelegate(string messageArg);

    class Listener
    {
        bool keepListening = true;

        public bool TalkToMe(string messageArg)
        {
            Console.WriteLine(messageArg);
            return keepListening;
        }

        public void Listen()
        {
            DateTime startTime = DateTime.Now;
            while ((DateTime.Now - startTime) < TimeSpan.FromSeconds(10))
            {
                Thread.Sleep(100);
            }
            keepListening = false;
        }
    }

    class Sender
    {
        public TalkDelegate Send;

        public void Run()
        {
            bool keepTalking = true;
            while (keepTalking)
            {
                keepTalking = Send(DateTime.Now.ToString("HH:mm:ss"));
                Thread.Sleep(1000);
            }
        }
    }