Пример #1
0
 public void Send(string data)
 {
     using (var memFile = SharedMemoryCommon.CreateOrOpenMemoryMappedFile())
         using (var memView = memFile.CreateViewAccessor())
         {
             var bytes = Encoding.Default.GetBytes(data);
             memView.Write(SharedMemoryCommon.DataLengthPosition, bytes.Length);
             memView.WriteArray(SharedMemoryCommon.DataPosition, bytes, 0, bytes.Length);
             _dataAvailable.Set();
         }
 }
Пример #2
0
        public void Start()
        {
            Task.Factory.StartNew(() =>
            {
                using (var memFile = SharedMemoryCommon.CreateOrOpenMemoryMappedFile())
                    using (var memView = memFile.CreateViewAccessor())
                    {
                        // Continue waiting and looping while data available satisfied the wait; stop looping when killer event is set
                        while (WaitHandle.WaitAny(new WaitHandle[] { _killer, _dataAvailable }) == 1)
                        {
                            int length = memView.ReadInt32(SharedMemoryCommon.DataLengthPosition);
                            var data   = new byte[length];

                            memView.ReadArray(SharedMemoryCommon.DataPosition, data, 0, length);
                            OnReceived(new DataReceivedEventArgs(Encoding.Default.GetString(data)));
                        }
                    }
            });
        }