我正在使用NUnit测试调试DLL,并且非常讨厌每个testrun都会出现大量的Debug Assertions。
所以我编写了一个工具来轮询新的Debug Assertion。该工具每隔x毫秒迭代到所有窗口,并检查标题是否是可能的Debug Assertion窗口标题集合之一。
在伪代码中,它看起来像这样:
firsts=[]
for i in range(dstart.month, datenow.month+1):
firsts.append(datetime.datetime(2015,i,1))
plt.xticks(firsts)
代码行void main()
{
var thread = new Thread(ThreadMethod);
thread.Start();
}
private void ThreadMethod()
{
while(true)
{
foreach(var title in possibleWindowTitles)
{
IntPtr windowHandle = FindWindowHandle(title);
if(windowHandle != IntPtr.Zero)
{
SetToForeground(windowHandle);
SendKeys.SendWait("%I);
}
}
}
}
将SendKeys.SendWait("%I")
的键组合发送到窗口,这是“继续”按钮的组合键。
我的问题是:
有更好的选择吗?类似的东西:
ALT + I
中的CloseWindow
方法对我没有用 - 没有异常,但没有任何反应)User32.dll
解决方法的更好解决方案我的方式有效,但我认为我的解决方案非常容易出错。所以,我有一个有好主意的人
答案 0 :(得分:1)
您可以配置对话框的行为。这是DefaultTraceListener提供的行为,可以在代码中或通过配置文件进行配置。 Debug.Assert的文档提到了这一点。
在配置文件中,您可以像这样关闭UI:
<configuration>
<system.diagnostics>
<assert assertuienabled="false" logfilename="c:\myFile.log" />
</system.diagnostics>
</configuration>
您也可以通过配置文件从集合中删除默认跟踪侦听器:
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<remove name="Default" />
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\myListener.log" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
其中任何一个也可以通过Debug.Listeners
集合的代码完成。