0

我正在使用 DataGridView 处理 ac# 项目并遇到了问题。

基本上,我有一个从任意数量的地方更新的网格,并且有一个按钮列。

我想捕获按钮点击(当然)并做一些涉及该按钮行中其他单元格的事情。据我所知,将单击与网格行关联的唯一方法是通过 EventArgs 的 RowIndex。

我担心的是网格可能会在用户单击和传递的事件之间发生变化,导致不正确的行看起来像是被单击了。

这会发生还是我是偏执狂?如果可能的话,无论如何我可以绑定对按钮或事件参数中的行的引用,以便即使它的索引已经更改,我也可以区分原始行?

4

1 回答 1

1

WinForms 中的 GUI 控件与 UI 线程“绑定”。

当您单击该行时,网格实现会处理此问题,并且作为单击处理的一部分会引发一个事件——所有这些都在同一个 UI 线程上。即使其他线程更改了网格内容,也必须将其序列化到 UI 线程(通常在后台发布 Windows 消息,或BeginInvoke使用 WinForms 术语 - 不完全相同,但很接近)。

这意味着即使有并发更改,如果您的点击已经注册,则事件不会因 UI 更新而中断。

但是请注意,后台线程可能会在您的处理程序运行时或在单击发生和事件处理之间更改该行绑定到的数据对象。尽管如此,它对您没有任何影响,因为网格 UI 更新需要序列化并且仍然会在您的事件处理程序之后发生。

于 2012-09-24T18:44:40.887 回答