Есть несколько хороших опций:
- Очередь сообщений
- Именованные каналы (напрямую)
- Файлы с отображением в памяти
- WCF в ИменованныхPipes или MSMQ
Любой из них является более чем достаточно быстрым, поэтому я бы посоветовал проще всего его реализовать.
Message Queue (MSMQ), на мой взгляд, наиболее прост в использовании, дает вам объектпередача (в отличие от потоков) и дает вам дополнительное постоянство транспорта (полезно, если отправитель или получатель не работает).Все это верно для WCF поверх MSMQ, но WCF означает больше накладных расходов, сложности и конфигурации, а также никаких дополнительных (в данном случае) значений.
Отправьте так:
MessageQueue queue = new MessageQueue(".\\private$\\ImagesQueue");
Message msg = new Message
{
Formatter = new BinaryMessageFormatter(),
Body = myImage,
Label = "Image"
};
queue.Send(msg);
Получите:
MessageQueue queue = new MessageQueue(".\\private$\\ImagesQueue");
msg = queue.Receive(TimeSpan.FromMilliseconds(100));
if (msg != null)
{
msg.Formatter = new BinaryMessageFormatter();
myImage = (MyImage)msg.Body;
}
Перед использованием необходимо создать очередь.Вы можете сделать это, когда ваше приложение запускается
Имейте это в своем классе:
private const string queueName = ".\\private$\\ImagesQueue";
И при инициализации / запуске приложения убедитесь, что ваша очередь:
if (!MessageQueue.Exists(queueName)
{
MessageQueue myQueue = MessageQueue.Create(queueName);
}
С этим механизмом очереди Engine не нужно ждать завершения просмотра.Это значительно улучшит воспринимаемую производительность, потому что вы можете генерировать следующее изображение (на самом деле их количество), пока предыдущее изображение еще просматривается.С картами, отображаемыми в память, добиться этого не так просто.
MSMQ - это стандартный компонент Windows, но его необходимо включить в компонентах Windows.