加载表单后自定义光标消失/停止工作秒

Custom cursors vanish / stop working seconds after loading form

当鼠标悬停在我的项目的某个对象(.ico 文件而不是 .cur)上时,我正在尝试使用自定义光标。它们在我加载时工作并完美显示,但它们在加载表单几秒钟后消失(或代码不起作用)!这些文件被设置为嵌入式资源,但我尝试了其他选项,但似乎没有什么不同。

Cursor foo = new Cursor(Properties.Resources.filename.Handle);

private void form_Load(object sender, EventArgs e)
{
    object.Cursor = foo;
}

即使我在鼠标悬停时更改光标,或改用 this.Cursor,也会发生这种情况。给出了什么?

您看到垃圾收集器正在执行它的工作。第一个 gen#0 垃圾收集将销毁 Properties.Resources.filename 返回的 Icon 对象。这使句柄无效,光标变为 bye-bye。使用句柄属性不足以保持对象被引用,它是一个 IntPtr 而不是对象引用。

您需要自己使图标对象保持活动状态:

private Icon fooIcon = Properties.Resources.filename;

public form() {
    InitializeComponent();
    object.Cursor = new Cursor(fooIcon.Handle);
    this.FormClosed += delegate { fooIcon.Dispose(); };
}