Esempio n. 1
0
 private ProcessHelper()
 {
     _bulk         = new SharedDataBulk(AppConstants.SharedMemoryName, sizeof(int) * _unitLength * _maxInstaces);
     _processIndex = FindValidIndex();
     if (ProcessIndex <= 0)
     {
         throw new MaxInstanceException();
     }
     AppDomain.CurrentDomain.DomainUnload += CurrentDomain_DomainUnload;
 }
Esempio n. 2
0
 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();
 }
Esempio n. 3
0
        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);
            }
        }