private ProcessHelper() { _bulk = new SharedDataBulk(AppConstants.SharedMemoryName, sizeof(int) * _unitLength * _maxInstaces); _processIndex = FindValidIndex(); if (ProcessIndex <= 0) { throw new MaxInstanceException(); } AppDomain.CurrentDomain.DomainUnload += CurrentDomain_DomainUnload; }
private void btnOK_Click(object sender, RoutedEventArgs e) { saveSetting(_baseConf); //判断当前已经启动的CCTV2.0客户端实例的个数。 SharedDataBulk sdb = new SharedDataBulk("SeecoolCCTV_2_0_SharedMemory", 4); if (sdb.AllInstanceIds.Length > 1) { this.Hide(); new TipWin().ShowDialog(); sdb.Dispose(); sdb = null; } this.Close(); }
private void FilterValidProcesses(Dictionary <int, InstanceIndex> procIndex) { List <int> diedIDs = new List <int>(); Process[] pros = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName); List <int> pIds = pros.Select(p => p.Id).ToList(); foreach (int bulkId in procIndex.Keys) { if (!SharedDataBulk.IsInstanceAlive(AppConstants.SharedMemoryName, bulkId)) { diedIDs.Add(bulkId); } else if (!pIds.Contains(procIndex[bulkId].ProcessID)) { diedIDs.Add(bulkId); } } //清除已结束进程占用的索引位。 foreach (int bulkId in diedIDs) { procIndex.Remove(bulkId); } }