1

私はこの問題を解決するために2時間以上費やしました.誰かが私を助けることができれば素晴らしいでしょう.. :)

基本的に、私がしようとしているのは、LINQ と Web サービスを使用してデータベースにクエリを実行し、情報を取得するアプリケーションです。

結果からいくつかの情報を抽出し、.CSV ファイルに書き込みます。

ロギングを除いて、すべてが完全に機能します。

UI がフリーズしたくないので、バックグラウンド ワーカーを実装しました。

ロガー テキスト ボックスをバックグラウンド ワーカーに渡し、静的 Web サービス メソッドからの進行状況を書き込みます。

using TextBoxAsAlias = System.Windows.Controls.TextBox;

ここで初めてロガー テキスト ボックスに書き込みますが、これは完全に機能します。

private void btnExecute_Click_1(object sender, RoutedEventArgs e)
        {
            // Register background worker
            worker.DoWork += worker_DoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;

            // Flush the content of the logger textbox
            txtboxLogger.Clear();
            txtboxLogger.AppendText("#########################" + Environment.NewLine);
            txtboxLogger.AppendText("# Logger - " + DateTime.Now.ToString("T") + "#" + 
        txtboxLogger.AppendText("#########################" + Environment.NewLine + Environment.NewLine);


        worker.RunWorkerAsync(new Object[] {txtboxLogger });

            }

ここで問題が発生します:

ご覧のとおり、DoWork メソッドでテキストを再度ログに記録しようとしています。問題は、worker_DoWork が終了したときにテキスト全体がログに記録されることです。その結果、5分間待ってもロガーのテキストボックスに何も起こらず、終了するとすぐにすべてが一度に書き込まれます。

void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Object[] parameter = (Object[])e.Argument;
            TextBoxAsAlias textboxLogger = (TextBoxAsAlias)parameter[0];

            textboxLogger.Dispatcher.InvokeAsync((Action)(() =>
            {
                txtboxLogger.AppendText(DateTime.Now.ToString("T") + " - Start processing ... " + Environment.NewLine);

                if (isAutoSelection)
                {
                    // Execute Webservice with auto selection
                    RandomDoWorkMethod(null, context, credential, dateStart, textboxLogger);
                }

                else
                {
                    // Read în the Numbers + hand it over to the webservice for further computing
                    RandomDoWorkMethod(ReadInputFile(), context, credential, dateStart, textboxLogger);
                }

            }));
        }

最後だけでなく、バ​​ックグラウンド ワーカー中にすぐにログ ファイルに書き込む方法を知っている人はいますか?

他のメソッドで次のコードをさらに使用しますが、すべてのメソッドが worker_DoWork スレッドにあるため、結果は同じです。

textboxLogger.Dispatcher.InvokeAsync((Action)(() =>
            {
))};

よろしくお願いします。

よろしく

ジョージ

4

3 に答える 3