2010-06-09 2 views
0

Я работаю с клиентским/серверным приложением на C#. Мой сервер. Захватите текущие курсоры мыши и отправьте их клиенту, чтобы курсор cleint также отслеживал соответственно. Я могу обнаружить курсоры Windows и сериализовать их по двоичному форматированию. он работает нормально, но проблема заключается в том, что существует множество курсоров, которые невозможно обнаружить как курсоры mspaint, поэтому я должен взять обработчик и создать курсор и его x точки доступа и добавить их в arraylist и сериализовать его по сети, но после 10 до 15 минут это исключает «Ошибка HRESULT E_FAIL была возвращена из вызова COM Compeonet» , и cleint выбрасывает исключение из «Исключение, вызванное мишенью вызова» Может ли кто-нибудь подскажет мне, что происходит неправильно или лучше сделать как этот Некоторые код здесьСериализация курсоров мыши по сети

IntPtr curInfo = GetCurrentCursor(); 
       Cursor cur; 
       Icon ic; 
       byte cursor = 0; 

       if (curInfo != null && curInfo.ToInt32() != 0) 
       { 
        cur = CheckForCusrors(curInfo); 
        try 
        { 
         if (!isLinuxClient) 
         { 

          if (cur == null) 
          { 

           PlatformInvokeUSER32.GetIconInfo(curInfo, out temp); 
           ic = Icon.FromHandle(curInfo); 
           //bitmap = ic.ToBitmap(); 
           ArrayList ar = new ArrayList(); 
           ar.Add(ic); 
           ar.Add(temp.xHotspot); 
           ar.Add(temp.yHotspot); 
           b.Serialize(stm, ar); 
          } 
          else 
          { 
           ArrayList ar = new ArrayList(); 
           ar.Add(cur); 
           b.Serialize(stm, ar); 
          } 
         } 
public Cursor CheckForCusrors(IntPtr hCur) 
     { 
      if (hCur == Cursors.AppStarting.Handle) 
       return Cursors.AppStarting; 
      else if (hCur == Cursors.Arrow.Handle) 
       return Cursors.Arrow; 
          . 
          . 
          . 
       else if (hCur == Cursors.PanWest.Handle) 
       return Cursors.PanWest; 

      return null; 
     } 

`

ответ

0

Попробуйте дис поместите все созданные вами ручки, например:

     using(ic = Icon.FromHandle(curInfo)) { 
          //bitmap = ic.ToBitmap(); 
          ArrayList ar = new ArrayList(); 
          ar.Add(ic); 
          ar.Add(temp.xHotspot); 
          ar.Add(temp.yHotspot); 
          b.Serialize(stm, ar); 
         } 
Смежные вопросы