我接手了一个键盘挂钩项目,并对其进行了一些修饰。过去只有 4 个表格,在这 4 个文件中包含所有逻辑和数学。很多小时后,我在将所有内容解耦后才将程序重新组合在一起。最新的一点是在主窗口上使用 Model-View-Presenter 设计概念。我所有的测试都在我的机器上运行良好,程序自然而然地在目标计算机上运行。
目标计算机是具有 2gb 内存的简单 x86 Intel Atom 处理器。它们上有与键盘上的 F13-F18 相关的按钮(这是我的键盘挂钩程序发挥作用的地方)。我的开发 PC 是半坚固的 6 核 AMD x64 机器,具有 8GB 内存。我想做的一件事是测试一种将这些功能按钮设置为特定任务的方法。我所有的单元测试都通过了这部分。当我单击新任务类型时,它会按需要工作。
“酷”,我说,“让我们看看它的实际效果”,所以我在 Visual Studio 中运行。我的程序 F9-F12 是挂钩的关键。现在,只有在主窗口打开时按下其中一个挂钩键时,分配窗口才会打开。如果该主窗口未打开,则执行任务。所以我打开我的主窗口并按 F9 并显示分配窗口,但我无法单击任何内容大约 4 秒。然后它“赶上”并执行我点击的操作。我想这可能是我的调试器,所以我去了 bin 文件夹并直接运行应用程序并进行同样的处理。
我想这可能是一个权限问题,所以我以管理员身份运行并遇到同样的问题。我想知道它在目标计算机上会有多糟糕。我将 bin 文件夹复制到闪存驱动器,将内容复制到 Program Files 并运行它。它工作得很好(在一定程度上很好)但问题不存在。在对话框可见后,我可以立即选择我想要的任何任务。
一件奇怪的事情是,尽管我的键盘挂钩在尝试重新分配 11 次后停止工作……但这是一个单独的问题。所以我想我记得有人说,使用分析器。好吧,我的视觉工作室有一个,所以我打开了它,但我无法确定返回的数据的正面或反面。我会发布代码,但我不知道该发布什么。我什System.Console.Write(".");
至在我认为有问题的区域周围使用,但这不是问题
protected override void theHook_RegisteredKeyPressed(System.Windows.Forms.Keys key)
{
if (TakeOver)
{
if (!Busy)
{
busy = true;
LibraryTrace.Start("NewKeyAssignment", key);
using (var window = new AssignmentTypePanel())
{
presenter = new TaskPresenter(window, theList[key].Task);
window.Presenter = presenter;
//execution will not continue past here until window is closed
window.ShowDialog();
}
theList[key] = new TaskKey(key, presenter.Task);
LibraryTrace.End("NewKeyAssignment", theList[key].Task.ToString());
busy = false;
}
}
else
{
base.theHook_RegisteredKeyPressed(key);
}
}
所以我被困住了。我不知道要输入什么,要问什么。关于如何找到这个问题的根源的任何提示?