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(); } }
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))); } } }); }