【问题标题】:Sub or Function is not executed while the application is hidden隐藏应用程序时不执行子或函数
【发布时间】:2017-09-20 11:16:28
【问题描述】:

我有一个在启动时使用 NotifyIcon 隐藏的 VB.NET 应用程序。

有一个每 10 秒执行一次的计时器……在计时器中:

如果文件存在,则不会执行任何操作。但是如果不存在,我会执行:

MySubOrFunction()

如果应用程序被隐藏,则不会执行 MySubOrFunction() 代码......正如我在上面告诉你的“我的应用程序在启动时被隐藏”

我尝试了 "Public Sub" 、 "Private Sub" ,同样适用于 "Function" ...我也尝试了 "Shared Function" 但它无法工作,因为我的某些代码需要访问另一个不在内部的代码函数/子。

我试图保持表单打开并且一切正常,但我希望它被隐藏:(

任何帮助将不胜感激!

谢谢! :-)


编辑:示例在这里(抱歉错过):

关于 Form_Load 事件:

Timer2.Enabled = True
Timer2.Start()

Timer2 每 5 秒执行一次,这里是 Timer2_Tick

Timer1.Enabled = True
Timer1.Start()

这是 Timer1_Tick

MySubOrFunction("start")

这里是 MySubOrFunction

Private Sub MySubOrFunction(ByVal status As String)
    If status = "start" Then
        ' My Code Here
        Return
    End If

    If status = "stop" Then
        Return ' stop the function
    End If
End Sub

这是我隐藏我的应用程序的方式:

Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        If Me.WindowState = FormWindowState.Minimized Then
            NotifyIcon1.Visible = True
            NotifyIcon1.Icon = SystemIcons.Application
            NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
            NotifyIcon1.BalloonTipTitle = "AppName"
            NotifyIcon1.BalloonTipText = "AppDesc"
            NotifyIcon1.ShowBalloonTip(50000)
            'Me.Hide()
            ShowInTaskbar = False
        End If
    End Sub

    Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
        Me.Visible = True
        'Me.Show()
        ShowInTaskbar = True
        Me.WindowState = FormWindowState.Normal
        NotifyIcon1.Visible = False
    End Sub

Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
        If Not Me.IsHandleCreated Then
            Me.CreateHandle()
            value = False
        End If
        MyBase.SetVisibleCore(value)
    End Sub

当应用程序没有被隐藏时,这可以正常工作......这些只是示例,而不是完整的代码!

【问题讨论】:

  • 该功能仅在应用程序隐藏时不运行,但是当应用程序未隐藏时,它运行良好。所以定时器没有任何问题。
  • 您需要提供minimal reproducible example。我们如何在不看代码的情况下提供建议?
  • 定时器在哪个表单事件中?
  • @NikolaosPolygenis 定时器不在任何事件中,它在它自己的事件中(Timer_Tick)
  • @Enigmativity 我尽量不粘贴我项目的任何代码...我现在将发布相同代码的示例...

标签: vb.net


【解决方案1】:

问题在于 Form_Load() 没有执行,因为您将表单隐藏在 SetVisibleCore 中。

Form_HandleCreated() 中启用计时器,它应该可以工作。

【讨论】:

    【解决方案2】:

    我用来隐藏表单的方式是问题!

    我删除了 NotifyIcon 并删除了以下内容:

    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
            If Me.WindowState = FormWindowState.Minimized Then
                NotifyIcon1.Visible = True
                NotifyIcon1.Icon = SystemIcons.Application
                NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
                NotifyIcon1.BalloonTipTitle = "AppName"
                NotifyIcon1.BalloonTipText = "AppDesc"
                NotifyIcon1.ShowBalloonTip(50000)
                'Me.Hide()
                ShowInTaskbar = False
            End If
        End Sub
    
        Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
            Me.Visible = True
            'Me.Show()
            ShowInTaskbar = True
            Me.WindowState = FormWindowState.Normal
            NotifyIcon1.Visible = False
        End Sub
    
    Protected Overrides Sub SetVisibleCore(ByVal value As Boolean)
            If Not Me.IsHandleCreated Then
                Me.CreateHandle()
                value = False
            End If
            MyBase.SetVisibleCore(value)
        End Sub
    

    这是在启动时隐藏应用程序的新方法

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' hide application on startup
        Me.Opacity = 0.0
        Me.ShowInTaskbar = False
        ' ---------------------
    End Sub
    
    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Shown
    
            Me.Visible = False
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2011-07-23
      • 1970-01-01
      • 2013-01-02
      • 2018-09-24
      • 2016-10-23
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多