protected Object ReadSharedMemory(Type T, string sharedMemoryFile) { Object data = null; int sharedMemorySize = Marshal.SizeOf(T); try { using (var mappedFile = MemoryMappedFile.OpenExisting(sharedMemoryFile)) { if (mappedFile == null) { return(null); } using (var memoryMappedViewStream = mappedFile.CreateViewStream()) { if (memoryMappedViewStream == null) { return(null); } var buffer = ReadBuffer(memoryMappedViewStream, sharedMemorySize); var alloc = GCHandle.Alloc(buffer, GCHandleType.Pinned); data = Marshal.PtrToStructure(alloc.AddrOfPinnedObject(), T); memoryMappedViewStream.Close(); alloc.Free(); } } } catch { } return(data); }
void ReadTelemetry() { StartSending(); Stopwatch sw = new Stopwatch(); sw.Start(); //read and process while (!IsStopped) { try { double frameDT = 0; while (true) { frameDT = sw.Elapsed.TotalSeconds; if (frameDT >= (updateDelay / 1000.0f)) { break; } } sw.Restart(); data = (WRCData)ReadSharedMemory(typeof(WRCData), "Local\\WRC-8wSotWzFKAhBlbW10ZJBKaWMdWszbBXg"); if (data == null) { continue; } ProcessWRCData((float)frameDT); } catch (Exception e) { Thread.Sleep(1000); } } StopSending(); Thread.CurrentThread.Join(); }