繁体   English   中英

是否可以将窗体控件放在其自己的线程上?

[英]Is it possible to put a form control on its own thread?

我正在使用DataGridView,并且某些操作确实使它在一段时间内变得无响应。 通常,我会将数据处理放在其自己的线程中以使表单更具响应性,但是在这种情况下,DataGridView本身花费了很长时间。

这使我想知道是否可以在一个线程上使用主窗体,而在另一个线程上使用DataGridView,这样就不会阻止主窗体响应。

我完全理解,这样做可能不是“安全的”,并且可能会打开一罐蠕虫,这使得它几乎不值得尝试,我完全希望这篇帖子因仅仅提出这样一个荒谬的想法而会被否决。

这可能吗? 如果是这样,您将如何处理?

编辑:我想出了如何解决手头的问题。 简短的答案是在设置RowCount时使用标志,以便CellValueNeeded()可以立即纾困。 故事还有很多,我已经做过一部分,但这就是要点。

简短的答案是否定的,因为该控件需要与其他控件(或至少是窗口)进行交互,并且它们都必须位于同一线程上。

这样做似乎意味着您正在UI线程上进行处理,这本身也是一个很大的禁忌。 您应该在自己的线程上运行所有主要进程 ,然后保存UI线程的最终演示文稿 -在一个线程上工作,在另一个线程上进行屏幕更新。

在给定的应用程序中绝对可能有多个UI线程。 但是,不可能将来自不同线程的UI组件组合到同一Form上。 对于给定的形式,所有组件都必须在同一线程上

解决此问题的最佳方法是将数据处理本身移到单独的线程上。 仅执行绝对最小值以从UI线程更新UI。 那应该有助于响应

了解网格中虚拟化的使用。

并请提供代码示例以了解操作花费的时间太长!

否,但是从dataGridView触发的事件中,您可以发送一个worker来执行异步任务,然后使用来自worker线程的控件Invoke方法来更新dataGridView

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM