Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Interprozesskommunikation über MemoryMappedFiles
Stu42
myCSharp.de - Member



Dabei seit:
Beiträge: 502
Herkunft: Aus dem Norden

Themenstarter:

Interprozesskommunikation über MemoryMappedFiles

beantworten | zitieren | melden

Hi,

anbei eine kleine Klasse zur schnellen Interprozesskommunikation über MemoryMappedFiles.
Die Komponente kann benutzt werden um Daten zwischen verschiedenen AppDomains oder Prozessen einfach und schnell auszutauschen.
Mehrere Teilnehmer teilen sich dabei einen Kanal. Schreibt ein Teilnehmer eine Byte-Nachricht, wird sie von allen anderen Teilnehmer Empfangen.

Anwendungsprogramm:


class Program
    {
        static void Main(string[] args)
        {
            IpcMmfTransition participantA = new IpcMmfTransition("TestChannel");
            IpcMmfTransition participantB = new IpcMmfTransition("TestChannel");
            IpcMmfTransition participantC = new IpcMmfTransition("TestChannel");

            participantA.DataAvailable += (transition, bytes) =>
            {
                Console.WriteLine("A received: " + Encoding.ASCII.GetString(bytes));
            };
            participantB.DataAvailable += (transition, bytes) =>
            {
                Console.WriteLine("B received: " + Encoding.ASCII.GetString(bytes));
            };
            participantC.DataAvailable += (transition, bytes) =>
            {
                Console.WriteLine("C received: " + Encoding.ASCII.GetString(bytes));
            };

            participantA.Run();
            participantB.Run();
            participantC.Run();

            while(participantC.GetNumberOfParticipants() < 3)
                Thread.Sleep(1);

            participantA.Transmit(Encoding.ASCII.GetBytes("A says Hello"));
            participantB.Transmit(Encoding.ASCII.GetBytes("B says Hello"));
            participantC.Transmit(Encoding.ASCII.GetBytes("C says Hello"));

            Thread.Sleep(500);

            participantA.Dispose();
            participantB.Dispose();
            participantC.Dispose();

            Console.ReadKey();
        }
    }
}

Das Programm mit dem benötigten Microsoft.Diagnostics.Runtime-Assembly befindet sich im Anhang.
Da ich die Komponente auch in meinen aktuellen Projekt einsetze, nehmen ich Fehler und anregungen gerne entgegen.

Liebe Grüße,
Stu

Edit: Mit NuGet

Schlagwörter: Interprozesskommunikation; Memory Mapped Files
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stu42 am .
Attachments
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Du solltest NuGet für das Mitführen der Microsoft.Diagnostics.Runtime verwenden.
Diese ist nämlich nach https://www.microsoft.com/net/dotnet_library_license.htm lizenziert und darf IIRC nicht so direkt im Programm oder im ZIP mitgeführt werden.

Zudem gibt es von Microsoft.Diagnostics.Runtime bisher kein Stable Release!
.. also alles andere als empfehlenswert für den produktiven Betrieb.
private Nachricht | Beiträge des Benutzers
Stu42
myCSharp.de - Member



Dabei seit:
Beiträge: 502
Herkunft: Aus dem Norden

Themenstarter:

beantworten | zitieren | melden

Ich hatte kein NuGet dafür gefunden - wohl nicht gut genug gesucht. Ich werds ändern.
private Nachricht | Beiträge des Benutzers