首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Datagridview在从线程更新时保留waitcursor

Datagridview在从线程更新时保留waitcursor
EN

Stack Overflow用户
提问于 2010-06-10 03:00:23
回答 3查看 4K关注 0票数 4

我的Windows Forms应用程序中有一个DataGridView控件。我正在使用后台线程向网格添加行。当流程开始时,我将表单的光标更改为Waitcursor,当流程结束时,又将其更改回默认状态。这适用于表单,但不适用于网格。当窗体的光标更改回默认值时,网格的光标不会更改,尽管光标位于窗体其余部分上时会更改。

这与我从后台线程更新网格的事实有关吗?(直接从UI线程更改光标)。

编辑:后台进程引发一个事件,处理程序检查网格的InvokeRequired属性,并决定是否需要从主线程再次“调用”该方法。因此,实际的UI更新实际上是从适当的线程进行的。我不确定这是否意味着我在“使用后台线程”。:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-03 21:14:53

我在执行数据网格的单线程更新时遇到了一些问题,在我将waitcursor设置为true之后,datagrid没有重置为正常的游标。我所做的就是在我去

代码语言:javascript
复制
this.UseWaitCursor = false;

我添加了

代码语言:javascript
复制
DatagridviewFoo.Cursor = this.Cursor;

也许对你来说也是同样的问题

票数 8
EN

Stack Overflow用户

发布于 2012-09-20 04:03:09

我也遇到过这个问题。很难找到原因,更不用说解决方案了。

只有当我在DGV控件上有一个对话框,并且鼠标单击按钮关闭框时,才会发生此问题,这样当框关闭时,鼠标位于(可调整大小的)列边框上。如果光标停留在单元格上,则不会出现问题。如果我必须猜测,我会说在对话框关闭时网格立即看到了一个列调整大小事件,该事件没有得到适当的处理。

使用Cursor.Current = Cursors.Default修复了我的问题(不需要显式地重置控件的光标)。但请注意,即使在显式控制游标重置的情况下,Application.UseWaitCursor = False也无法工作。

票数 3
EN

Stack Overflow用户

发布于 2012-12-11 04:14:18

我也有类似的问题,但上面的两个解决方案对我都不起作用。我的问题不是由单击可移动的列分隔符上方的按钮引起的。它只是在打开和关闭对话框后随机发生的。我非常确定这归结于时间问题,因为.Net/Windows在设置游标并实际使其生效时存在问题。为了克服这个问题,我们用来显示和隐藏等待游标的库调用- ack!- Application.DoEvents。我在OnCursorChanged中设置了一个断点,发现光标有时实际上是在后面对Application.DoEvents的调用上设置的(用于在等待文件系统释放文件上的写锁定时保持UI响应)。因此,我猜有时在设置等待游标的调用完全生效之前,默认游标就会重新打开。无论如何,我的暴力方法是调用

代码语言:javascript
复制
Cursor = Cursors.Default;

在我的OnCellEnter覆盖中(这总是在关闭对话框后刷新网格之后发生)。我对此并不特别自豪,但它似乎是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3008958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档