2010-06-09 100 views
0

我正在C#中处理客户端/服务器应用程序。我的服务器捕获当前的鼠标光标并将它们发送到客户端,以便光标的光标也相应地变化。我可以检测窗口游标并通过二进制格式化对它们进行序列化。它工作正常,但问题是有许多游标,不能像mspaint游标检测,所以我必须采取它的处理程序,并创建光标和它的nad y热点,并将它们添加到一个arraylist并通过网络序列化,但在10到15分钟它thorws异常 “错误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

尝试DIS构成您创建的所有手柄,例如:

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