2015-05-15 38 views
0

在Windows窗體項目中,我訂閱了全局鍵盤事件,使用win32 API激發事件,當我按下win + alt + E時,驗證碼:從不同的線程調用控制失敗,出現跨線程異常

_rectangle = new ScreenBoundingRectangle(); 
    _rectangle.Location = Location; 
    _rectangle.Visible = true; 

我保持一個變量來我的矩形,現在基於一些邏輯,我想隱藏的矩形,所以我使用這行代碼的可見性設置爲false:

_rectangle.Visible = false; 

但是,我得到着名的跨線程異常,即使我試試這個:

this.Invoke(new MethodInvoker(() => 
    { 
     _rectangle.Visible = false; 
    })); 

我還是得到了交叉線程異常!

_rectangle沒有調用方法,有沒有其他解決方法呢?

+0

的Visiable財產什麼是豐滿型的' ScreenBoundingRectangle'?它似乎不是BCL類。 –

+0

對不起,我現在看到。 –

+0

@JasonWatkins,VisualUIAVerify.Utils.ScreenBoundingRectangle, – Stacker

回答

0

只是誰可以使用VisualUIAVerify庫,並會面臨這樣的問題:

下載開放源代碼,這增加的ScreenBoundingRectangle

 public bool Visible 
     { 
      get { return this._visible; } 
      set 
      { 
       this._visible = value; 

       if (value) 
        SafeNativeMethods.ShowWindow(_form.Handle, 8); 
       else 
       { 
        //Here invoke _form: 
        this._form.Invoke(new MethodInvoker(() => 
        { 
         _form.Hide(); 
        })); 

       } 
      } 
     }