none
スレッドからのコントロールの操作 RRS feed

  • 質問

  • スレッドから直接コントロールは操作できないと

    http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html

    ここなどを拝見して知り、改善しようと思いましたが

     private Thread t;

    t = new Thread(new ThreadStart(aaa));
    t.Start();

    delegate bool hakoire();

    private void aaa()

     {

    Invoke(new hakoire(bbb()));

    }

     private void bbb()
            {
                textBox1.AppendText("ああああああ");
            }

     

    などとしてみましたが

    メソッド名が必要です。 

    とエラーがでました。


    何が悪いのかわからないのです。

    原因を教えていただけると助かります。

    2006年9月26日 11:59

すべての返信

  • 取りあえずリンク先の Invoke 呼び出しているところとご自分でお書きになったコードを良く見比べてみてはどうでしょう。

    それはそれとして、hakoire デリゲートに bbb メソッドを使おうとしてらっしゃいますが、あるデリゲートに何らかのメソッドを登録する要件は「シグネチャが同じ」ことです。シグネチャとは引数、返値の両方を指します。

    2006年9月26日 12:37
  • 宣言するとき

    delegate void hakoire();

    bool→void

    にしてみたらエラーが出なくなりました。

    ありがとうございます。

    ちなみにたとえば

    bbbメソッドに

    stringを渡す時はどうすればよいのでしょうか?

    普通に

    private void aaa()

     {

    string ttt = "あああああああ";

    Invoke(new hakoire(bbb(ttt)));

    }

     private void bbb(string vvv)
            {
                textBox1.AppendText("vvv");
            }

     

    としたら

    無効なトークン 'void' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。 

    と出るので、なんと宣言すればよいかわからないです。

    2006年9月26日 13:06
  • >bbbメソッドにstringを渡す時はどうすればよいのでしょうか?

    引数を引き渡すタイプの Invoke() メソッドを使います。

    Invoke() のヘルプに、記述例も記載されています。

     

    2006年9月26日 14:06
    モデレータ
  • こういうことですよね?

    http://www.atmarkit.co.jp/fdotnet/onepoint/onepoint03/onepoint03_02.html

    どうもありがとうございました。

    2006年9月27日 1:34