2015-04-08 84 views
0

我正在使用Windows窗体应用程序由于添加的安全措施,我必须在我的应用程序中解决会话。目前我正在使用定时器来实现功能我能够关闭窗体但我需要再次重新启动应用程序返回到登录form.I现在用的是下面的代码Windows窗体中的会话实现

Private Sub sessionTimer_Tick(sender As Object, e As EventArgs) Handles sessionTimer.Tick 
    Try 
     Me.sessionTimer.Stop() 
     Me.sessionTimer.Enabled = False   
     Process.Start(Application.StartupPath + "\application.exe") 
     Process.GetCurrentProcess().Kill() 
    Catch ex As Exception 

    End Try 

End Sub 

我得到一个异常时,我用上面的方法,并没有达到目的,我也已经尝试使用Application.Restart没有工作出来。请帮助我对Windows窗体新。此外,为了重置计时器,我使用下面的代码。

Private Sub frmMain_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove 
    Me.sessionTimer.Stop() 
    Me.sessionTimer.Start() 
End Sub 

但这似乎并没有工作的主要形式有菜单的,我现在用的导航到其他形式,因此空闲时间不应包括在其中通过菜单的打开其他形式所花费的时间。我应该在frmMain中使用哪个事件来处理此问题。谢谢

+2

什么是例外到底是什么?而'C#'标签似乎没有必要。 –

+0

你为什么想要杀死应用程序?仅仅显示登录表单并关闭当前打开的所有其他表单是不是更好? –

+0

我已经尝试使用下面的代码@ZoharPeled,而不是Process.Start&杀死我.Hide() 昏暗的f1作为新的frmLogin f1.Show()但这似乎并不工作,虽然登录页面显示,但不显示主表单可能是因为在登录表单之前有其他表单链接。我很难找到入口点或优先的第一组代码。 –

回答

0

只是让框架做的工作。

Application.Restart() 

如果从后台线程会话定时器火灾(也许你使用的System.Timers.Timer代替System.Windows.Forms.Timer)你propable必须与你的主线程同步。

Me.Invoke(new MethodInvoker(Addressof Application.Restart)) 

如果Application.Restart无法正常工作,那么您的应用程序可能存在问题。你应该尝试以下。

  • 如果你创建的线程,确保它们与“thread.IsBackground =真正的”创建,否则他们将让你的进程中打开
  • 停止你的定时器和后台工作人员。
  • 请确保您没有处理FormClosing事件并设置e.Cancel = true的窗体。在这种情况下,您必须考虑e.CloseReason
  • 用户马克赫德发布了关于Application.Restart期间会发生什么伟大的职位,看看here
+0

我试了一个Application.restart没有锻炼我导入'System.Windows.Forms.Timer'到我的frmMain你能告诉我如何同步我的timer.I从我的工具箱中拖动一个计时器到frmMain。也为'Me.Invoke(新MethodInvoker(Application.Restart))'它会引发编译错误 –

+0

@RoyDevjyoti对不起,我把C#转换为VB.NET,并没有尝试过。它应该是'Me.Invoke(新MethodInvoker(Addressof Application.Restart))'我更新了我的答案。我还添加了一些建议,接下来要做什么。 –

0

Iam使用此代码重新启动我的应用程序。它工作得很好。

System.Diagnostics.Process.Start(Application.ExecutablePath) 'First start a new instance 
    Me.Close() 'Close the current application 

如果这不起作用。我认为没有办法比使用另一个重新启动Process的应用程序。下面是一个代码示例(第二个应用程序)

Private Shared Sub RestartApp(pid As Integer, applicationName As String, arguments As String) 
    ' Wait for the process to terminate 
    Dim process__1 As Process = Nothing 
    Try 
     process__1 = Process.GetProcessById(pid) 
     process__1.WaitForExit(1000) 
      ' ArgumentException to indicate that the 
      ' process doesn't exist? 
    Catch ex As ArgumentException 
    End Try 
    Process.Start(applicationName, arguments) 
    'Arguments? 
End Sub 

Source of the code

+0

试图它没有锻炼刚刚结束的应用程序@manuchao –

+0

哪个.Net框架你使用和从哪里是你运行代码(Mainform !?)? – C0d1ngJammer

+0

我正在使用.net Framework 2.0.I正在运行代码主要形式 –

相关问题