Winforms 如何像启动调试模式那样在不进行调试的情况下启动项目? 我使用C++托管2010来设计一个表单中的GUI。GUI充当从卡查询数据流的主界面

Winforms 如何像启动调试模式那样在不进行调试的情况下启动项目? 我使用C++托管2010来设计一个表单中的GUI。GUI充当从卡查询数据流的主界面,winforms,multithreading,visual-c++-2010,Winforms,Multithreading,Visual C++ 2010,按下按钮将调用一个函数(在ApplicationIO.cpp文件中),其中使用API win32(CREATETHREAD(…)创建了两个线程:前者用于处理数据流,后者用于GUI上实时grpah上的数据解析和数据监控 该项目有两种不同的行为:如果在调试模式下启动,它可以在数据扫描期间将GUI控件更新为textbox(使用invoke)和graph,反之,如果在未调试的情况下启动,则textbox中不会显示任何数据,并且数据在图表上显示得非常慢 有没有人解决过类似的问题?有什么建议吗?一个非常典型

按下按钮将调用一个函数(在ApplicationIO.cpp文件中),其中使用API win32(CREATETHREAD(…)创建了两个线程:前者用于处理数据流,后者用于GUI上实时grpah上的数据解析和数据监控

该项目有两种不同的行为:如果在调试模式下启动,它可以在数据扫描期间将GUI控件更新为textbox(使用invoke)和graph,反之,如果在未调试的情况下启动,则textbox中不会显示任何数据,并且数据在图表上显示得非常慢


有没有人解决过类似的问题?有什么建议吗?

一个非常典型的错误是太频繁地使用Control::Begin/Invoke()。您将用委托调用请求淹没UI线程。UI更新往往代价高昂,您很容易陷入消息循环无法执行其低优先级任务的状态。我喜欢绘画。这种情况很容易发生,每秒调用1000次以上是危险区域,这取决于委托目标花费的时间

你可以通过以真实的速率发送更新来解决这个问题,这个速率可以利用人眼的辨别能力。以每秒25次的速度,更新会变得模糊,更新速度再快也只是浪费cpu周期。这就为UI线程留出了大量的时间来完成它需要做的事情

当更新费用昂贵时,这可能仍然不够慢。此时您需要跳过更新或限制工作线程。请注意,Invoke()会自动调节,而BeginInvoke()不会