输入表单模态消息循环而不显示实际表单

时间:2014-03-10 16:08:16

标签: c# .net vb.net winforms

我有一个WinForms应用程序,其中包含一个主窗体MainForm。此应用程序在某些时间间隔内调用某些计划操作。此操作需要花费大量时间来执行,因此它在后台线程中启动。当操作正在运行时,显示进度 - LoaderForm。此表单通过loader.ShowDialog(mainForm)显示为模式;装载机在显示时开始操作。

除非在以下情况下开始操作,否则此工作正常:

  • MainForm在任务栏中最小化
  • MainForm隐藏在托盘中(根本未显示在任务栏中)

在这种情况下,除非激活应用程序,否则我需要来显示LoaderForm。问题是即使LoaderForm在没有正确处理的情况下在视觉上不可见,也会显示MainForm

实现理想行为的最简单方法是什么?


示例代码

Imports System.ComponentModel


Public Class MainForm

    Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles uiTimer.Tick
        uiTimer.Enabled = False
        Using loader = New LoaderForm()
            loader.ShowDialog(Me)
        End Using
    End Sub

End Class

Public Class LoaderForm

    Private Sub LoaderForm_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
        worker.RunWorkerAsync()
    End Sub

    Private Sub Worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles worker.RunWorkerCompleted
        Me.Close()
    End Sub

End Class

0 个答案:

没有答案