<Window …
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"
/>
<TextBlock Text="{Binding Path=Caption, diagnostics:PresentationTraceSources.TraceLevel=High}" … />
如果我通过按F5在VS2008中启动我的WPF应用程序,在输出窗口中,我确实看到了数据绑定详细消息:
System.Windows.Data Warning: 47 : Created BindingExpression (hash=25209742) for Binding (hash=3888474)
…
System.Windows.Data Warning: 91 : BindingExpression (hash=25209742): GetValue at level 0 from Star (hash=31609076) using RuntimePropertyInfo(Caption): ‘ ‘
System.Windows.Data Warning: 71 : BindingExpression (hash=25209742): TransferValue – got raw value ‘ ‘
System.Windows.Data Warning: 78 : BindingExpression (hash=25209742): TransferValue – using final value ‘ ‘
但如果我直接运行应用程序并附加VS2008进行处理,则输出窗口中没有数据绑定消息。
为什么这些跟踪消息在我附加到进程时不会显示?如何获取这些数据绑定跟踪消息?
(在生产环境中,我的应用程序由另一个exe启动,我所能做的就是附加到进程)。
答案 0 :(得分:0)
这纯粹是猜想。
当您使用F5从Visual Studio启动应用程序时,它有一个控制台输出窗口,并且可能在PresentationTraceSources的初始化期间添加了一个默认的ConsoleTraceListener,它可以连接到Visual Studio输出控制台。
当您在调试器之外启动应用程序时,可能它不能/无法成功添加ConsoleTraceListener,因为周围没有...因此当您将进程附加到调试器时,WPF数据绑定跟踪源不会重定向到输出窗口。
也许您可以在附加到流程后附加控制台侦听器。
System.Diagnostics.PresentationTraceSources.Refresh();
System.Diagnostics.PresentationTraceSources.DataBindingSource.Listeners.Clear();
System.Diagnostics.PresentationTraceSources.DataBindingSource.Listeners.Add(new ConsoleTraceListener());
System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level = System.Diagnostics.SourceLevels.Warning;
最后,确实使用了Bea Stollnitz / Costa文章中提到的App.Config来获取指向文本文件的输出? ....那样做了吗?
在您附加到流程之后,可能值得检查System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level的值是什么。
这将详细介绍整个TraceSources机制:
http://blogs.msdn.com/b/mikehillberg/archive/2006/09/14/wpftracesources.aspx