0

如何使 GUI 事件屈服于给定线程?GUI 事件是指诸如打开子表单、选择不同的选项卡、最小化/最大化我的表单或更改焦点之类的事情。

当我的工作线程获取数据时,我可以限制它的资源,并拒绝来自我应用程序中其他进程或线程的这些资源吗?

历史:
在我的问题,我解释了一个场景,我担心我的主表单调用会导致我的关键线程挂断。然后向我透露,我可以选择“BeginInvoke”。

现在我发现,虽然 BeginInvoke 让我走到了一半,但我仍然无法避免我的关键线程中的挂断。当我说“关键线程”时,我指的是一个循环大约需要 60 毫秒的线程,但必须在 130 毫秒过去之前完成循环。它坐在那里循环,轮询数据列表。当数据出现时,通常需要 40 到 60 毫秒才能完成处理。

(从技术上讲,我计划恢复)第二个线程向我的表单抛出 BeginInvokes 以更新用户的运行状态。目前,出于调试目的,我没有这样做。

我做了一些分析,我注意到我几乎总是将我的处理时间远远低于 100 毫秒,这是我需要的,因为我的应用程序需要不迟于下一个数据包出现时输出结果(每 100 毫秒,但对于这个例子我把它减慢到 130 毫秒)。当我与表单交互时,例如改变焦点或最小化/最大化它,我可以看到我的处理时间峰值超过 1 秒。我认为这是因为诸如最小化或最大化或其他重绘事件之类的愚蠢事情正在掠夺我所有宝贵的时钟时间。

平台:
我正在使用带有 WinForms 的 Visual C# 2008。目标机器运行 Windows XP。我尝试关闭 Windows 资源管理器,并以 Normal、High 和 Realtime 优先级运行我的应用程序,但在操作表单时我仍然看到几乎相同的影响。

编辑 我试图在工作循环期间的关键时刻使用 Thread.CurrentThread.Priority 来限制我的优先级。这不知何故无法从我的 GUI 中夺走这些资源,涉及重绘 GUI 的操作仍然统治着我可怜的工作线程。

4

1 回答 1

1

您是否尝试使用Thread.Priority属性将工作人员类的线程优先级设置为实时?

根据调度优先级的描述,这应该为您的工作线程提供更高的优先级。但是,这会导致您的 GUI 卡顿,因此您可能只想在关键时间段将优先级设置为高。

于 2012-06-02T19:42:43.367 回答