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