私は数ヶ月前にC#とWPFを使い始めましたが、今はスレッド化のようないくつかの新しいテクニックを学ぼうと思っていました。だから私は常に(無限ループを使用して)実行したいが、毎分ダイアログ(メインウィンドウ)を表示するアプリケーションを持っている。だから私はスレッドを使用してこれを行うと、ここで私はこれをやっている方法です午前:私のcallmyfunctionでWPF用のリセットコントロール
public MainWindow()
{
InitializeComponent();
while (true)
{
callmyfunction()
system.Threading.Thread.Sleep(1000);
}
}
()、私は(メインのWPFアプリケーションである)ダイアログを呼び出していますので、それが表示されます。私はそれをやっている方法は次のとおりです:
普通のボタンがあり、それをクリックするとメインウィンドウが隠れるはずです。だから私のボタンの機能は、このようなものです:
private void Button_Click2(object sender, RoutedEventArgs e)
{
this.Hide();
}
それでは、私がやっていることは、私は通常、メインウィンドウをロードしていますし、それがボタンを持って、私はそのボタンをクリックすると、それがメインウィンドウを非表示とすべきですウィンドウは、thread.sleepで指定されたミリ秒単位でスリープ状態になり、起動すると再びダイアログが表示され、ボタンなどが表示されます。このループはうまく動作しますが、最初のダイアログが表示された後、メインウィンドウを隠すボタンをクリックすると、メインウィンドウが2回目に表示され、ボタンは "押された"ボタンではなく、新しいボタンとして表示されます。メインウィンドウがはじめて表示されたときにそのウィンドウを「押した」ためだと思います。そして、私はプログラムを止めてもう一度それを実行するまでそれを維持します。
私の質問は、どのように私はボタンコントロールを "リセット"できますか?または、マウスクリックイベントをリセットする必要がありますか?これを指すポインタは参考になります。
コンストラクタ内の無限ループは非常に悪い考えです。 –
@sir Rufoどのように来ますか?あなたは詳細を教えていただけますか? –
無限実行コンストラクタからインスタンスを構築することはできません。コンストラクタは最後にインスタンスを返しますが、オープンエンドがあるためにあなたのものはそうではありませんでした。 –