myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Interprozesskommunikation über MemoryMappedFiles
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Interprozesskommunikation über MemoryMappedFiles

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Stu42 Stu42 ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.10.2006
Beiträge: 502
Entwicklungsumgebung: VS 2005
Herkunft: Aus dem Norden


Stu42 ist offline

Interprozesskommunikation über MemoryMappedFiles

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
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


Dateianhang:
unknown IpcMMF.zip (8 KB, 116 mal heruntergeladen)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stu42 am 03.06.2016 08:11.

02.06.2016 16:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.651
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
02.06.2016 17:09 Beiträge des Benutzers | zu Buddylist hinzufügen
Stu42 Stu42 ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.10.2006
Beiträge: 502
Entwicklungsumgebung: VS 2005
Herkunft: Aus dem Norden

Themenstarter Thema begonnen von Stu42

Stu42 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich hatte kein NuGet dafür gefunden - wohl nicht gut genug gesucht. Ich werds ändern.
02.06.2016 17:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Jahre.
Der letzte Beitrag ist älter als 2 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.05.2019 14:02