Win32 API AnimateWindow冻结WinForm

时间:2015-08-18 02:32:37

标签: vb.net winforms winapi

我在WinForm中调用本机Win32 API。

在我进一步解释之前,我应该解释一下我想要做什么。我正在进行API调用以检索一些数据,然后在WinForm上显示它。但是,我正在尝试复制本机Toast通知(但请注意,这是一个桌面exe @当下)。

我可以通过AnimateWindow检索数据并在表单上显示它。

但是我需要显示表单5秒。我使用了 Thread.Sleep(5000),我知道这不是显示表单的正确方法。

我还需要在表单上有一个关闭按钮(没有可见的表格边框)只是一个" X" png在PictureBox中。所以我希望PictureBox点击事件我可以关闭表单。

但是,由于我使用了 Thread.Sleep(5000),我无法点击该表单!即使我将鼠标悬停在表单上,​​光标也会切换到等待光标。

有什么方法可以完成那个关闭按钮吗?

如果需要,我会发布代码。

1 个答案:

答案 0 :(得分:0)

您可以使用Async / Await with Task.Delay()在暂停期间保持表单响应:

Private Async Sub AnimateWindowSub()

    ' ... { animate window call here } ...

    Await Task.Delay(5000)
    Me.Close()
End Sub

Private Sub pb_X_Close_Click(sender As Object, e As EventArgs) Handles pb_X_Close.Click
    Me.Close()
End Sub

Async / Await组合允许消息泵仍然工作并捕获PictureBox点击事件,尽管暂停,然后关闭。