zal*_*nix 9 c# logging event-handling visual-studio-2013
我有一个WPF应用程序,其代码用C#编写,在Visual Studio 2013中开发.这是一个GUI解决方案,有许多相互依赖的项目,包括按钮,字段,菜单,复选框和文本.
我的目标是创建最终用户在使用此应用程序时所采取的所有操作的日志文件(txt文件将执行).示例操作可以是按钮单击,写入空白文本字段,(de)选中复选框,关闭活动/选项卡等.我想捕获应用程序UI中的所有此类用户交互,并执行这些操作存储为文本日志文件中操作的汇总的一行描述.
一种方法是使用代码更新所有上述元素(按钮,文本字段,...)的事件处理程序,以写入要附加到txt日志文件的操作的摘要.例如,在接受按钮单击处理程序中:
private void buttonAccept_Click(object sender, EventArgs e)
{
// TODO: default button click handler code...
// TODO: ...and the code to write the event to a txt log file
}
Run Code Online (Sandbox Code Playgroud)
但这个策略会很痛苦来完成,不必更新每每一个事件处理程序(甚至写事件处理程序不具有任何当前的元素).
我正在寻找一种更简单的方法来实现这一目标.我的一些想法是:
一种方法是更改事件处理程序基类(所有其他事件处理程序继承自?)以包含日志文件编写代码.这样,日志文件代码只需要编写一次,每当调用任何事件处理程序时都会调用它,这就是我们想要的(需要区分用户生成的事件和应用程序生成的事件,在事件链接的情况下,这可能很难.所以这可能是一个挑战).
另一种方法是使用一些" 嗅探器 ",它像调试器一样工作,并存储应用程序方法的堆栈跟踪,当用户移动它时.这将使我们只对用户的工作流程有所了解.
private void buttonAccept_Click(object sender, EventArgs e)
private bool IsValidName(string userName)
private void buttonCancel_Click(object sender, EventArgs e)
private void Close()
...
Run Code Online (Sandbox Code Playgroud)
在邮件中添加时间戳会很有用......
3/1/2015 18:19 private void buttonAccept_Click(object sender, EventArgs e)
3/1/2015 18:19 private bool IsValidName(string userName)
3/1/2015 18:21 private void buttonCancel_Click(object sender, EventArgs e)
3/1/2015 18:21 private void Close()
...
Run Code Online (Sandbox Code Playgroud)
...因为,删除与前一个消息的时间戳差异低于合适阈值的消息,将只留下用户操作直接调用的方法.假设方法签名足够描述,则此消息列表可以作为所需的日志文件.
3/1/2015 18:19 private void buttonAccept_Click(object sender, EventArgs e)
3/1/2015 18:21 private void buttonCancel_Click(object sender, EventArgs e)
...
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于具有与之关联的事件处理程序的元素.不过,它比蛮力方法更好.
我想出一个实现这些想法的方法有些困难.任何人都可以详细说明如何实施它们吗?或者,如果您可以提出更好的方法来制作日志文件,请分享您的想法以及如何开发它.谢谢!
| 归档时间: |
|
| 查看次数: |
4359 次 |
| 最近记录: |