我运行的程序在运行.exe文件时工作正常,但在VS2005中打开并从那里播放时的工作方式与预期不同。因此,我在这里询问是否有人知道任何可以在.exe文件中工作但不能从VS调试的东西?我无法发布我正在谈论的按钮的代码,但我会尝试解释我能做的最好的。
有一个接收器连接到计算机。按下程序上的按钮时,它会显示一条消息并等待接收信号。听到信号后,第一个消息框应该关闭而另一个应该打开。使用.exe文件时,这很好。但是当从VS2005(与制作.exe时相同的程序)播放程序时,第二条消息在应该出现的时候没有出现,当我可以使它出现时,第一个框不会关闭。如果有帮助,还有一个计时器。
此外,执行程序时两者的运作方式有根本区别吗?
如果我需要更清楚地说明或提供更多细节,请告诉我。
答案 0 :(得分:4)
与运行独立程序相比,在调试器的监督下运行程序可以更改事件的时间。调试器减慢了速度。通常情况下,这对程序的运行没有任何影响,但是如果你的代码依赖于某些活动的“巧合”快速计时,那么当调试器控制下的事情变慢时,这种快乐的巧合可能会被打破。
调试器还可以引起焦点和激活的变化,具体取决于您设置断点的位置 - 在焦点更改或激活事件中设置断点通常不是一个好主意,因为在断点处停止会将焦点更改为调试器,远离你的应用。但这些是互动问题。只需在没有断点的情况下在调试器下运行程序不应影响应用程序中的焦点或激活。
仔细检查您的代码。如果在每个源代码语句之间插入延迟,请考虑您的程序流可能发生的情况。如果这可能导致问题,那么您有一个需要修复的设计错误。依赖巧合的时间将导致错误报告和支持电话,特别是如果您的客户的硬件速度比开发机器慢。
答案 1 :(得分:1)
当您在调试器下运行时,甚至在VS测试主机中运行时,都存在一些细微差别。但是,这不应该在正常情况下影响您的程序,因为大多数差异类似于在较慢的系统上运行(调试版本)应用程序。
鉴于您的描述,我怀疑您的问题实际上是由于从与构造控件不同的线程调用UI。确保始终使用Control.Invoke或Control.BeginInvoke封送对UI的任何调用。
答案 2 :(得分:0)
这可能是主机进程的一个问题,禁用它是一个无痛的点击,同样容易重新启用。值得一试。
I know this can effect Direct X和其他API,但我从来没有完全相同的情况所以我没有做出承诺。