2009-12-20 29 views
16

¿Cuál es la manera más eficiente y rápida de enviar el mensaje a un hilo (no en el proceso) que se ejecutan en el tiempo (1) en bucle en C#/Neto:.mejor manera de enviar un mensaje a un hilo

  1. Uso una cola sincronizada (como en Blocking Queues & Thread’s Communication in C#)

  2. Ejecución de un ciclo de mensajes Utilizando Application.Run de winforms de sistemas en el contexto de subprocesos y antes de ejecutar la aplicación. ejecute suscríbase a un evento que capture el messsage en el contexto de subprocesos.

  3. Usando socket o named pipe para enviar un mensaje al thread.

En Linux que estoy acostumbrado a hacerlo con sockets de dominio Unix, ¿cuál es la forma equivalente a hacerlo en las ventanas? compartir el archivo de memoria? tubo con nombre? ¿Qué opinas?

Respuesta

15

Usaría una cola de productor/consumidor, personalmente. Eso es efectivamente lo que es el bucle de mensajes de WinForms, solo en una forma específica de Windows Forms.

Tenga en cuenta que si puede utilizar .NET 4.0, hay collections integrados en el marco que hacen que esto sea muy fácil. En particular, usando un BlockingCollection<T> envuelto alrededor de un ConcurrentQueue<T> hará lo que quiera.

yo no usaría personalmente el código GeeksCafe - Me encapsular la naturaleza productor/consumidor en su propia clase que envuelve una cola, en lugar de tratar cualquier cola de esa manera a través de los métodos de extensión. En particular, necesita que todas las partes manejen la cola correctamente, lo que significa que es mejor darle su propia API en mi opinión.

+0

clase de cola productor/consumidor como en http://www.albahari.com/threading/part2.aspx? – Eyalk

+0

Gracias Jon, ¿la cola de productor/consumidor será más rápida que named pipe para transferir el mensaje? – Eyalk

+0

@Eyalk: sospecho que sí, pero compárelo si está particularmente preocupado. Tiene la ventaja de permitir que las referencias de objetos se transfieran directamente, en lugar de una tubería con nombre que básicamente te obligaría a serializar/deserializar. –

Cuestiones relacionadas