0

申し訳ありませんが、この質問にタイトルを付ける方法がわかりません。

私はこのエラーの説明を約10回書いた後、はっきりしないので削除しました-許してください、私はコードに直接飛び込んでから説明します

public MainWindow()
    {
        InitializeComponent();
        stuff();
    }

    private void stuff()
    {
            DispatcherOperation disOp = Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(delegate
                {
                    //PrintDialog dialog = new PrintDialog();
                    //dialog.PrintVisual(canvas1, "");
                }));

            string x = disOp.Status.ToString();
            MessageBox.Show(disOp.Status.ToString());
    }

このコード(Visual StudioではF11)をステップ実行しました。このコードが行 disOp.Status.ToString()に到達すると、次のF11が期待どおりに次の行にジャンプします。

ただし、その行に到達してMessageBox.Show(disOp.Status.ToString());F11キーを押すと、DispatcherOperationデリゲートにジャンプします。

私の質問は、文字列ではなくメッセージボックスコントロールを使用すると、なぜこれが発生するのかということです。

(これは実際には私が必要とする正確な動作ですが、ユーザーが[OK] / [キャンセル]をクリックする必要があるため、メッセージボックスを表示したくありません...他にこれを複製するにはどうすればよいですか?)

ありがとうございました

デイブ

4

1 に答える 1

1

BeginInvokeは、現在のスレッドが保留中のメッセージを自由に処理できるようになるまで、実際にアクションを実行することはありません。メッセージを処理できるようにするには、MessageBoxがポンピングしている必要があります(DoEventsのようなもの)。

于 2012-06-14T01:41:57.990 に答える