0

私はこのアクションを実行しようとしています:

Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            ... // do some UI specific stuff
        });

しかし、ラムダ式を UI スレッドに送信する代わりに、バックグラウンド ワーカーに送信したいと考えています。

状況はそのようなもので、追加の処理 (この場合はファイルのコピー) を行うかどうかを知る必要があるメッセージボックスがあります。

どうすればこれを達成できますか?私は、ラムダ式ディスパッチを含まない種類のリファクタリング ソリューションに対してオープンです。

読んでくれてありがとう

4

2 に答える 2

0

私があなたの質問を正しく理解していれば、あなたはこのようなものを見ているでしょう。最初に UI スレッドでメッセージボックスを表示し、結果を待ち、必要に応じて一部の作業をバックグラウンド スレッドにディスパッチします。

Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            //Show messagebox
            var result = MessageBox.Show("Question?", "Title", MessageBoxButton.OKCancel);

            //Check messagebox result
            if (result == MessageBoxResult.OK)
            {
                ThreadPool.QueueUserWorkItem(x =>
                {
                    //Do some work, transfer a file
                });
            }
        });
于 2013-09-04T09:30:03.177 に答える
0

MessageBox は UI スレッドで実行されるため、モーダル表示から戻ると、UI スレッド上にいます。この時点で UI ディスパッチャにディスパッチしても意味がありません。

ラムダをバックグラウンド スレッド (例: ThreadPool.QueueUserWorkItem、Task 経由など) で実行し、それが終了したらディスパッチャーを使用して UI スレッドに戻ります。ただし、UI スレッドからのディスパッチャーが必要です。コードで言及したものと異なるかどうかはわかりません。

于 2013-09-04T12:42:41.903 に答える