Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从不同的线程/类访问单个并发队列_C#_Multithreading_Queue_Sharing - Fatal编程技术网

C# 如何从不同的线程/类访问单个并发队列

C# 如何从不同的线程/类访问单个并发队列,c#,multithreading,queue,sharing,C#,Multithreading,Queue,Sharing,我希望在这个问题上有足够的细节 概述: 我的任务是从TCP流中获取数据,并将数据显示在gui上,同时格式化数据并将其写入文件。我可以单独做所有的项目,但我有一个问题粘在一起 在我的主要工作中,我称我的tcp_侦听器为 MyTcpListener.start(); MyTcpListener不断循环和读取数据 public class MyTcpListener { //public string start(ref CQ.ConQueue init_concurrent_queue

我希望在这个问题上有足够的细节

概述: 我的任务是从TCP流中获取数据,并将数据显示在gui上,同时格式化数据并将其写入文件。我可以单独做所有的项目,但我有一个问题粘在一起

在我的主要工作中,我称我的tcp_侦听器为

MyTcpListener.start();
MyTcpListener不断循环和读取数据

 public class MyTcpListener
{

    //public string start(ref CQ.ConQueue init_concurrent_queue)
    public static void start()
    {
        TcpListener server = null;

        try
        {
            // Set the TcpListener on port 13000.
            Int32 port = 13000;
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");

            // TcpListener server = new TcpListener(port);
            server = new TcpListener(localAddr, port);

            // Start listening for client requests.
            server.Start();
            ....
           while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    // Translate data bytes to a ASCII string.
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("Received: {0}", data);

                    //  !!!  ADD DATA TO QUE HERE
                    Program.ConQueue

                    // Process the data sent by the client.
                    data = data.ToUpper();

                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
                    data.ToString();

                    // Send back a response.
                    stream.Write(msg, 0, msg.Length);
                    Console.WriteLine("Sent: {0}", data);


                }
在上面的部分中,每当我获得新数据时,我都会将其写入控制台。但我需要做的是将它放入一个并发队列中,我的另一个类可以将它从队列中取出并写入一个文件

我该怎么做? 我应该在main中创建对象并通过引用将其传递给其他线程/类吗


或者有没有一种方法可以多次实例化对象,但在内存中只在内部创建一个队列,所有对象都可以访问它?

使用ConcurrentQueue类。它包含多线程操作所需的功能

资料:


您应该将队列传递到对象中

公共字符串开始(CQ.ConQueue队列)

我不确定该对象是什么,但.NET提供了一个线程安全队列

有这样一种思想,即变量,无论您创建了多少个类实例,它都只有一个实例。将它们用于您的问题类型是不可取的,因为这不是它们的目的,它隐藏了对象之间的队列共享,并绝对防止您拥有多个队列

我注意到,你路过这里,这不是必需的。如果在C#中传递一个,则实际上传递一个指向原始对象的指针。通过
ref
传递它具有不同的、更复杂的含义(通过引用传递指针),我认为这不是您的意图