Готовые решения и полезные коды на Visual Basic .NET (Часть-1) - Visual Basic .NET - Ответ 5582532

Взаимодействовать между различными приложениями можно по разному, например, через сокеты. Но в

.NET 4.0

была введена новая функциональность, которая представляет собой создание участка общей разделяемой памяти для приложений.

Основной функционал новой технологии заключается в пространстве имен

System.IO.MemoryMappedFiles

Создадим два консольных приложения, одно из которых будет посылать сообщение в общую память, а другое - считывать это сообщение.

Код приложения, записывающего сообщение в память.

VB.NETВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Imports System.IO.MemoryMappedFiles
Module Module1
 
    Sub Main()
        Console.WriteLine("Введите сообщение")
        'Ввод выражения для записи в общую память
        Dim message As Char() = Console.ReadLine()
        'Размер введенного сообщения
        Dim size As Integer = message.Length
         'Создание участка разделяемой памяти
        'Первый параметр - название участка, 
        'второй - длина участка памяти в байтах: тип char  занимает 2 байта 
        'плюс четыре байта для одного объекта типа Integer
        Dim sharedMemory As MemoryMappedFile = MemoryMappedFile.CreateOrOpen("MemoryFile", size  2 + 4)
         'Создаем объект для записи в разделяемый участок памяти
        Using writer As MemoryMappedViewAccessor = sharedMemory.CreateViewAccessor(0, size  2 + 4)
            'запись в разделяемую память
            'запись размера с нулевого байта в разделяемой памяти
            writer.Write(0, size)
            'запись сообщения с четвертого байта в разделяемой памяти
            writer.WriteArray(Of Char)(4, message, 0, message.Length)
        End Using       
         Console.WriteLine("Сообщение записано в разделяемую память")
        Console.WriteLine("Для выхода из программы нажмите любую клавишу")
        Console.ReadLine()
    End Sub
 End Module

Код приложения, считывающего сообщение из памяти.

VB.NETВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

Imports System.IO.MemoryMappedFiles
Module Module1
 
    Sub Main()
        'Массив для сообщения из общей памяти
        Dim message As Char()
        'Размер введенного сообщения
        Dim size As Integer
         'Получение существующего участка разделяемой памяти
        'Первый параметр - название участка, 
        'второй - длина участка памяти в байтах: тип char  занимает 2 байта 
        'плюс четыре байта для одного объекта типа Integer
        Dim sharedMemory As MemoryMappedFile = MemoryMappedFile.OpenExisting("MemoryFile", size  2 + 4)
        'Сначала считываем размер сообщения, чтобы создать массив данного размера
        'Integer занимает 4 байта, начинается с первого байта, поэтому передаем цифры 0 и 4
        Using reader As MemoryMappedViewAccessor = sharedMemory.CreateViewAccessor(0, 4, MemoryMappedFileAccess.Read)
            size = reader.ReadInt32(0)
        End Using
         'Считываем сообщение, используя полученный выше размер
        'Сообщение - это строка или массив объектов char, каждый из которых занимает два байта
        'Поэтому вторым параметром передаем число символов умножив на из размер в байтах плюс
        'А первый параметр - смещение - 4 байта, которое занимает размер сообщения
        Using reader As MemoryMappedViewAccessor = sharedMemory.CreateViewAccessor(4, size  2, MemoryMappedFileAccess.Read)
            'Массив символов сообщения
            message = New Char(size - 1) {}
            reader.ReadArray(Of Char)(0, message, 0, size)
        End Using
        Console.WriteLine("Получено сообщение :")
        Console.WriteLine(message)
        Console.WriteLine("Для выхода из программы нажмите любую клавишу")
        Console.ReadLine()
    End Sub
 End Module

Теперь запускаем первое приложение, вводим сообщение и отправляем его в память. Затем запускаем второе приложение и видим наше сообщение из разделяемой памяти.

Вернуться к обсуждению:

Готовые решения и полезные коды на Visual Basic .NET (Часть-1) Visual Basic .NET