我有个追踪器:
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线程问题,因为如果进程足够长,就会在处理过程中进行更新。我只想让更新发生得更快。
例如,一些处理有一个..。我想要“”以追踪的方式出现。
发布于 2022-06-24 03:36:15
在这里找到答案:https://learn.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);
}https://stackoverflow.com/questions/72353150
复制相似问题