保存事件日志时的进度输出

时间:2014-04-10 16:37:48

标签: c# wpf

我不确定这是否可能,或者是否有更好的方法可以做到这一点,但我真的想显示此操作的进度。我对C#开发还很陌生,所以任何建议都会非常感激。

这是我到目前为止所拥有的。我希望相应地更新我的进度条:

async void EventLogs(string exportPath, string log)
{

    await Task.Run(() =>
        {
            try
            {
                EventLogSession eventlog = new EventLogSession();
                eventlog.ExportLogAndMessages(log,
                    PathType.LogName,
                    "*",
                    exportPath + " " + log + ".evtx",
                    false,
                    CultureInfo.CurrentCulture
                    );
            }
            catch (UnauthorizedAccessException)
            {

            }
            catch (EventLogNotFoundException)
            {

            }
            catch (EventLogException)
            {

            }   
        });
    }
}

2 个答案:

答案 0 :(得分:2)

异步并通过IProgress<T>等待支持进度指示,如Task-based Asynchronous Pattern documentation中所述。请注意,Progress<T>会为您处理UI调度,因此不必弄乱Dispatcher

不幸的是,ExportLogAndMessages不支持进度报告。因此,如果您需要一些有意义的进展,则需要弄清楚如何对事件日志消息进行分区。然后,您可以为分区的不同段调用该方法,在中间调用之间调用IProgress<T>.Report

答案 1 :(得分:0)

我可以想到两个选择:

  1. 您可以使用BackgroundWorker,它具有允许您报告进度的特定功能,并为您处理ui调度。
  2. 如果你坚持使用async await和Tasks的新api,你需要确保使用Dispatcher.BeginInvoke()在UI线程而不是Task线程中调用你的代码,那么你将不得不使用数据绑定,如果您使用MVVM,则使用INotifyPropertyChanged设置属性,或者如果您正在执行快速且脏的UI,则只访问ProgressBar的引用。
  3. 编辑:

    如果您不确定进度计算,只需将其与IsIndeterminate属性一起使用。

    HIH

    爱丽儿