Обмен данными между приложениями

491
10 августа 2017, 20:52

Нужно передавать данные между приложениями на одном компьютере. Использую такой код:

запись в память

namespace WriteMemoryAp
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Введите сообщение");
        //Ввод выражения для записи в общую память
        char[] message = Console.ReadLine().ToCharArray();
        //Размер введенного сообщения
        int size = message.Length;
        //Создание участка разделяемой памяти
        //Первый параметр - название участка, 
        //второй - длина участка памяти в байтах: тип char  занимает 2 байта 
        //плюс четыре байта для одного объекта типа Integer
        MemoryMappedFile sharedMemory = MemoryMappedFile.CreateOrOpen("MemoryFile", size * 2 + 4);
        //Создаем объект для записи в разделяемый участок памяти
        using (MemoryMappedViewAccessor writer = sharedMemory.CreateViewAccessor(0, size * 2 + 4))
        {
           //запись в разделяемую память
           //запись размера с нулевого байта в разделяемой памяти
            writer.Write(0, size);
            //запись сообщения с четвертого байта в разделяемой памяти
            writer.WriteArray<char>(4, message, 0, message.Length);
        }      
        Console.WriteLine("Сообщение записано в разделяемую память");
        Console.WriteLine("Для выхода из программы нажмите любую клавишу");
        Console.ReadLine();
    }
}
}

Считываем из памяти

class Program
{
    static void Main(string[] args)
    {
        //Массив для сообщения из общей памяти
        char[] message;
        //Размер введенного сообщения
        int size;
        //Получение существующего участка разделяемой памяти
        //Параметр - название участка
        MemoryMappedFile sharedMemory = MemoryMappedFile.OpenExisting("MemoryFile");
        //Сначала считываем размер сообщения, чтобы создать массив данного размера
        //Integer занимает 4 байта, начинается с первого байта, поэтому передаем цифры 0 и 4
        using (MemoryMappedViewAccessor reader = sharedMemory.CreateViewAccessor(0, 4, MemoryMappedFileAccess.Read))
        {
            size = reader.ReadInt32(0);
        }
        //Считываем сообщение, используя полученный выше размер
        //Сообщение - это строка или массив объектов char, каждый из которых занимает два байта
        //Поэтому вторым параметром передаем число символов умножив на из размер в байтах плюс
        //А первый параметр - смещение - 4 байта, которое занимает размер сообщения
        using (MemoryMappedViewAccessor reader = sharedMemory.CreateViewAccessor(4, size * 2, MemoryMappedFileAccess.Read))
        {
            //Массив символов сообщения
            message = new char[size];
            reader.ReadArray<char>(0, message, 0, size);
        }
        Console.WriteLine("Получено сообщение :");
        Console.WriteLine(message);
        Console.WriteLine("Для выхода из программы нажмите любую клавишу");
        Console.ReadLine();
    }
}

Но почему-то выдает ошибку

файл "MemoryFile" не найден

Хотя я даже под админом запускал.

Может, кто знает, в чем дело, или киньте аналогичное решение.

READ ALSO
Служба windows С#

Служба windows С#

Есть приложение написанное на C#, все параметры приложения прописаны в configini

359
Лаги при использовании requestAnimationFrame

Лаги при использовании requestAnimationFrame

Почему при использовании в коде (пример) конструкции

335
Заменить буквы на цифры в js

Заменить буквы на цифры в js

Мне надо поменять все буквы в строке по шаблону из массиваНачал, но не смог продолжить

923