2016-07-27 5 views
1

publicメソッド内に次のコードがありますが、静的メソッドではどのように使用しますか? ostatic TextBoxですか?静的メソッドで起動しますか?

Invoke((MethodInvoker)delegate { 
    o.Text = str + Environment.NewLine; 
}); 

私はSystem.Reflection名前空間にMethodInfoクラスにまで読みましたが、何も動作しているようだありません。

public static void writeOut(string str) 
{ 
    Invoke((MethodInvoker)delegate { 
     o.Text = str + Environment.NewLine; // runs on UI thread 
    }); 
} 

コードは動作しませんが、私は上記のスニペットのような静的メソッドでinvokeに呼び出すことができる何かをする方法を知りたいこと:ちょうどあなたを表示するために、私はこれを行うに何かをしたいです。

public static void writeOut(string str) 
{ 
    o.Invoke((MethodInvoker)delegate { 
     o.Text = str + Environment.NewLine; // runs on UI thread 
    }); 
} 

すなわち:

+0

"' 'は静的なTextBox'"ですので、そうです。 – carefulnow1

+1

なぜ 'o'は静的な'静的TextBox'ですか? – Jace

+0

少しの文脈で、テキストボックスの内容を別のスレッドから変更したいのですが、私は静的メソッドからそれをやりたいのです。ですから私は 'private static TextBox o'を行い、次にコンストラクタで' o = output'を実行します。出力はテキストボックス 'o'が指し示すものです。 - http://imgur.com/a/GtryL – carefulnow1

答えて

1

あなたの質問に直接答えがo.Invoke()メソッドを使用することですoがこのコンテキストで有効な識別子であり、実際にはTextBoxオブジェクトを参照していると仮定すると、TextBoxオブジェクトのInvoke()メソッドを呼び出すことができます。

私は、あなたのフォームにstaticのコントロールインスタンスを持つことがというのは、実際にはという悪い考えを持っているという意見に同意しました。これは、フォームのインスタンスを1つしか持てないことを意味するハックです。つまり、インスタンスメソッド(コンストラクタなど)のstaticフィールドを正しく初期化する必要があります。

static参照が必要な場合は、フォームオブジェクト自体を参照してください。さらに、フォームオブジェクトリファレンスを処理する必要があるオブジェクトにフォームオブジェクトの参照を渡します。あなたの質問には、正確にはどういうものなのかを示唆する文脈は十分ではありませんが、基本的な考え方は、本当に静的なもの、つまり一度以上インスタンス化できるタイプ。


WPFを学ぶためのヒント…

WPFは確かにステップアップで学習価値がありますが、Winformsよりもはるかに急なカーブです。 WinFormsには、単純なコントロールオブジェクトとイベントドリブンモデルがあり、データバインディング機能は最小限に抑えられています。WPFは強力な「懸念の分離」プログラミング手法、データバインディング、全く異なる言語を使用してUI自体を定義しています(すなわちXAML)。これらの方法論は非常に有用であり、正しく実装されれば、ずっと優れた保守性の高いコードにつながります。しかし、WPF APIの使用方法を学ぶにはさらに多くの作業が必要です。WPF API自体は非常に複雑で、何かを実装する方法については明確な選択肢が1つもありません。

関連する問題