我如何配置ShowDialog

本文关键字:配置 ShowDialog 何配置 | 更新日期: 2023-09-27 18:07:20

我接手了一个键盘钩子项目,并一直在整理它。过去只有4个表单,在这4个文件中包含了所有的逻辑和数学。所以许多小时后,在解耦一切后,我刚刚把程序重新组装起来。最新的一点是在主窗口上使用模型-视图-演示者的设计概念。我所有的测试都在我的机器上运行得很好,程序在目标计算机上的运行也很正常。

目标计算机是具有2gb内存的简单x86 Intel Atom处理器。它们上面有与键盘上的F13-F18相关的按钮(这就是我的键盘挂钩程序发挥作用的地方)。我的开发PC是一台半坚固的6核AMD x64机器,内存为8gb。我想做的一件事是测试一种将这些Function按钮设置为特定任务的方法。这部分的所有单元测试都通过了。当我点击一个新的任务类型时,它会按预期工作。

"酷",我说,"让我们看看它在行动",所以我在Visual Studio中运行。在我的程序中,F9-F12是键钩。现在,分配窗口只有在主窗口打开时按下其中一个钩形键时才会打开。如果主窗口未打开,则执行任务。所以我打开我的主窗口,按F9,分配窗口显示,但我不能点击任何东西大约4秒。然后它就会"赶上"我,做我点的任何事情。我想也许是我的调试器,所以我去了bin文件夹,直接运行应用程序,同样的处理。

我想也许这是一个权限的事情,所以我运行作为管理员和同样的问题。我想知道它在目标电脑上会有多糟糕。我把我的bin文件夹复制到一个闪存驱动器上,把内容复制到Program Files中,然后运行它。它工作得很好(在某种程度上很好),但问题并不存在。我可以在对话框显示后立即选择我想要的任何任务。

一个奇怪的事情是,虽然我的键盘钩子停止工作后11次尝试重新分配它…但这是另一个问题。我记得有人说过,用侧写师。我的visual studio有一个,所以我打开了它,但我不能对返回的数据做出正面或反面的判断。我想写代码,但我不知道该写什么。我甚至在我认为有问题的地方使用了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);
   }
}

所以我被卡住了。我不知道该打什么,该问什么。关于如何找到这个问题的根源,有什么建议吗?

我如何配置ShowDialog

我在使用winforms开发的一个应用程序中遇到了类似的问题——"服务器端"操作非常快,但是显示结果的表单仍然需要5秒才能显示出来。
经过调查,发现winforms有一些已知的性能问题。这里有一些优化建议(比如这里或这里,还有一些我当时发现的,但现在似乎找不到)。

事实上,在我的情况下,他们都没有帮助。
我最终意识到真正的瓶颈是创建和显示一个新表单;我最终做的是一个小hack——
我把所有控件都放在主窗体上,其中一些隐藏起来,并通过隐藏一些控件和显示其他控件来模拟窗体的变化。
它很丑,不能扩展,但在我的例子中运行得很好。