2010-06-09 104 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); 
         }