2012-04-24 3 views
0

alredyこれについての質問です。しかし、ここではもう少し別の質問が出てきます。私はそれにおしゃべりを見つけることができません!winformsのcomboBox1のクロススレッドエラーC#/ NET

String text = this.GuiThread(() => this.comboBox1.Text); 

if (text == "this") 
{ 
    //do somthing spectacular! 
} 

テキストが割り当てられていないローカル変数の

使用。..空の変数またはそうです。これは私が得るエラーです..そしてivは私がこことmsdnで見つけることができるすべての例をテストしました。

イムも持つ:

public static class ControlExtensions 
    { 
     public static void GuiThread(this Control ctrl, Action action) 
     { 
      if (ctrl.InvokeRequired) 
      { 
       ctrl.BeginInvoke(action); 
      } 
      else 
      { 
       action.Invoke(); 
      } 
     } 
    } 

アイデア?

答えて

1

このコードはコンパイルできません。 GuiThreadはvoidを返すので、それを文字列に代入しようとしています。例外をどのように得ることができるのかは疑いありません。それは、少なくともこのように見える必要があります:

public static class ControlExtensions { 
    public static T GuiThread<T>(this Control ctrl, Func<T> action) { 
     if (ctrl.InvokeRequired) { 
      return (T)ctrl.Invoke(action); 
     } 
     else { 
      return action(); 
     } 
    } 
} 

このようなコードを記述しないでくださいユーザーがそれを修正している間、それはを得ることができるので、あなたが読んであげる実際のコンボボックスのテキストはかなりランダムです。スレッドを起動するときに必要な引数をスレッドに与えます。 BackgroundWorkerクラスは、あなたを困らせないようにします。

+0

このコードでは、他のGUI出力で100kエラーが発生しました.GuiThread(>)this.listView1.Sorting = SortOrder.None);コードの残りの部分でどうやって行うのですか? – 1244

+0

*機能の名前を変更し、オリジナルを保持することを検討しましたか? –

+0

それはうまくいきました。私はそれが何をしているのか、それが私の機能に何を加えるのかをよく理解しています。 – 1244

関連する問題