小编zal*_*nix的帖子

如何捕获WPF应用程序中的所有用户操作以将其存储在日志文件中?

介绍

我有一个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 …
Run Code Online (Sandbox Code Playgroud)

c# logging event-handling visual-studio-2013

9
推荐指数
1
解决办法
4359
查看次数

使用std :: getline检测输入结束

我有一个包含以下代码段的代码:

std::string input;
while(std::getline(std::cin, input))
{   
    //some read only processing with input
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序代码时,我通过文件in.txt(使用gedit创建)重定向stdin输入,它包含:

ABCD
DEFG
HIJK
Run Code Online (Sandbox Code Playgroud)

上面的每一行都以in.txt文件中的一行换行结束.

我面临的问题是,在while循环运行3次后(对于每一行),程序控制不会向前移动并且卡住.我的问题是为什么会发生这种情况,我该怎么做才能解决问题?

一些澄清:

我希望能够从命令行运行程序:

$ gcc program.cc -o out
$ ./out < in.txt
Run Code Online (Sandbox Code Playgroud)

附加信息:

我做了一些调试,发现while循环实际上运行了4次(第四次输入为空字符串).这导致循环编程停止,因为//只有输入读取的某些处理无法完成其工作.

所以我提出的问题:

1)为什么第四个循环运行?

在while循环条件下使用std :: getline()的基本原理必须是,当getline()无法再读取任何输入时,它返回零,因此while循环中断.

与此相反,while循环继续使用空字符串!那么为什么get循环条件中的getline呢?设计不是那么糟糕吗?

2)如何在不使用break语句的情况下确保while不会第四次运行?

现在我使用了break语句和字符串流,如下所示:

std::string input;
char temp;
while(std::getline(std::cin, input))
{       
    std::istringstream iss(input);
    if (!(iss >>temp))
    {    
        break;
    } 
    //some read only processing with input
}
Run Code Online (Sandbox Code Playgroud)

但显然必须有一种更优雅的方式.

c++ stdin gedit getline while-loop

6
推荐指数
2
解决办法
2万
查看次数

计数十进制数的二进制格式的1

我试图找出大十进制数的二进制形式的1的数量(十进制数可以大到1000000).

我尝试了这段代码:

while(sum>0)  
{  
    if(sum%2 != 0)  
    {  
        c++;   // counting number of ones  
    }  
    sum=sum/2;  
}  
Run Code Online (Sandbox Code Playgroud)

我想要一个更快的算法,因为大十进制输入需要很长时间.请建议我一个有效的算法.

c++ binary decimal

5
推荐指数
3
解决办法
2万
查看次数

如何决定何时从头开始包装/端口/写入

我将在Smalltalk(Pharo)中建立一个项目.还有一个python库,我打算用它来做同样的事情.现在,有3个选项:

  • 这些python库的Smalltalk包装器
  • 将python库移植到Smalltalk
  • 从头开始编写库(在Smalltalk中)以便在我的项目中使用

以下是我的疑问:

  1. 移植/包装的"基本"差异是什么(在任何地方都找不到令人满意的解释)
  2. 如何知道何时使用哪个(三者中的哪一个)?
  3. 任何资源或指针,我可以得到进一步的帮助/一些启动我的项目.

谢谢!

python porting smalltalk wrapper pharo

4
推荐指数
1
解决办法
250
查看次数

如何在 Xamarin Android 对话框活动上动态设置标题?

我在 Xamarin Android 上有 2 个活动。请注意,第二个样式设置为作为对话框打开。

[Activity(Label = nameof(ActivityOne), HardwareAccelerated = true, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
public class ActivityOne : Activity { ... }

[Activity(Label = nameof(ActivityTwo), HardwareAccelerated = true, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait, Theme = "@android:style/Theme.Holo.Dialog")]
public class ActivityTwo : Activity { ... }
Run Code Online (Sandbox Code Playgroud)

第一个像这样调用第二个:

var activity = new Intent(this, typeof(ActivityTwo));
StartActivity(activity);
Run Code Online (Sandbox Code Playgroud)

当第二个活动打开时,我希望能够在对话框上动态设置标题。

我在第二个活动的创建中尝试这样做:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.ActivityTwo);
    SetTitle(Resource.Id.title);

    ...
}
Run Code Online (Sandbox Code Playgroud)

其中 title 被定义为 ActivityTwo.axml 中的“隐藏”文本视图:

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/title"
  android:text="Example Title"
  android:visibility="gone" />
Run Code Online (Sandbox Code Playgroud)

但这就是我在运行应用程序时得到的对话框标题:

对话活动标题

同样没有 SetTitle …

xamarin.android

2
推荐指数
1
解决办法
2965
查看次数

如何在C中读取2D双数组中的.pgm图像文件

问题很简单:如何将.pgm图像文件读入C中的2D双数组.我的内存中没有.pgm缓冲区.我想把它从磁盘读入内存.

如果我能得到一个代码片段,我将非常感激.谢谢.

c arrays double 2d pgm

1
推荐指数
1
解决办法
1万
查看次数