0

これについてはすでに質問があります。しかし、ここに少し異なる別の質問があります、そして私はそれにオーナーを見つけることができません!

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

アイデア?

4

1 に答える 1

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

このようなコードを記述しないでください。実際に読み取るComboBoxテキストは、ユーザーが変更しているときに取得できるため、かなりランダムです。スレッドを開始するときに必要な引数をスレッドに与えます。BackgroundWorkerクラスは、問題を回避します。

于 2012-04-24T23:21:12.387 に答える