【问题标题】:UWP Delayed updates to Textbox using TraceListenerUWP 使用 TraceListener 延迟更新文本框
【发布时间】:2022-06-24 11:36:15
【问题描述】:

我有一个跟踪监听器:

public class WindowTraceListener : System.Diagnostics.TraceListener
{
    Model.TraceListener _value;
    public WindowTraceListener(Model.TraceListener value)
    {
        _value = nessusToChecklist;
    }
    public override void Write(string message)
    {
        _value.TraceOutput += message;
    }

    public override void WriteLine(string message)
    {
        _value.TraceOutput += (message + Environment.NewLine);
    }
}

还有一个 POCO:

public class TraceListener: ObservableRecipient
{
    private string _TraceOutput;
    public string TraceOutput
    {
        get => _TraceOutput;
        set => SetProperty(ref _TraceOutput, value, true, "TraceOutput");
    }


}

绑定到文本框:

    <Grid  Grid.Row="2" BorderBrush="Gray" BorderThickness="2" Margin="10,0">
        <ScrollViewer Name ="scrollTraceOutput"  >
            <TextBox Name="txtTraceOutput" TextWrapping="Wrap" Text="{Binding TraceListener.TraceOutput, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" TextChanged="TextBox_TextChanged"  ></TextBox>
        </ScrollViewer>
    </Grid>

问题是文本框的更新被延迟并且不是实时发生的。我认为我没有 GUI 线程问题,因为如果进程足够长,则在处理期间会发生更新。我只是希望更新更快。

例如,某些处理有一个...而我想要“.”显示为被跟踪。

【问题讨论】:

  • 你能给我们一个minimal reproducible example吗,我们不能用上面的代码做一个repro示例,它错过了模型类和其他细节。

标签: uwp uwp-xaml


【解决方案1】:

在这里找到答案: https://docs.microsoft.com/en-us/windows/uwp/debug-test-perf/keep-the-ui-thread-responsive

在 GUI 线程上调用了我长时间运行的进程:

var result = await worker.CreateChecklists(options, runFolderPath);

解决方案是在后台线程上调用它:

await System.Threading.Tasks.Task.Run(() => DoWork());
async System.Threading.Tasks.Task DoWork()
{
var result = await worker.CreateChecklists(options, runFolderPath);
}

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2018-12-19
    • 1970-01-01
    • 2014-06-14
    • 2010-11-08
    相关资源
    最近更新 更多