您可以通过加载网格,滚动到最后一行并使用CTRL+C复制一些单元格内容来重新创建问题。您会注意到UI僵局,CPU利用率尖峰和UI永远不会恢复。
i我自己尝试覆盖CTRL+C动作,以查看是否可以解决该问题,但此方法也发生了同样的僵局:
grid.KeyDown += (object? sender, KeyEventArgs e) =>
{
if (e.Modifiers.HasFlag(Keys.Control) && e.KeyCode.HasFlag(Keys.C))
{
Clipboard.SetDataObject(grid.GetClipboardContent());
e.Handled = true;
}
base.OnKeyDown(e);
};
尽管我不知道为什么会发生这种解决方法。
如果您检查
Clipboard.setDataObject正在使用的方法,您会注意到它的覆盖率为
open
public static void SetDataObject(object data, bool copy)
。此参数具有以下描述:
True如果您希望数据退出后保留在剪贴板上;否则,false.
不确定为什么,而是将open
参数设置为true
而不是默认解决问题:
false
grid.KeyDown += (object? sender, KeyEventArgs e) =>
{
if (e.Modifiers.HasFlag(Keys.Control) && e.KeyCode.HasFlag(Keys.C))
{
Clipboard.SetDataObject(grid.GetClipboardContent(), true);
e.Handled = true;
}
base.OnKeyDown(e);
};
copy
参数与此问题有关。另一种方法覆盖了retryTimes
和retryDelay
不会影响这种行为。