2017-03-15 5 views
-1

私は仕事をしている会社のために作ったvbアプリをラップしている途中です。セキュリティ上の理由から、プログラムが開いている時間を追跡し、 2時間、彼らは、 "あなたは操作制限を超過した"と言った簡単なMsgBoxを表示するか、そのようなものを表示してからプログラムを終了させたい。vb.net Windowsフォームプログラムを2時間経過すると自動的にどのように終了しますか?

私はいくつかの調査を行いました。私はSystem.Threading.Timerが必要なものだと思っていますが、作業中にユーザーに邪魔になるのではないかと不思議です。私が作ったプログラムは、さまざまなWindowsフォームで構成されています。ユーザーはさまざまなタスクを実行できます.Timerのオンラインでは、常にコールバックする必要がありますが、ユーザーは別のフォームを使用している可能性がありますその時には、私はそれが時間をチェックするためだけに働いている間も、ユーザーからの制御を離れさせることを望んでいません。

私はすでにグローバル変数のパブリッククラスを持っていますが、どのようなフォームに入っていても時間を維持するだけでなく、時間が過ぎてもプログラム全体を殺すことを知っていることができますか?

+0

短い答えは、経過時間をチェックするタイマーです。つまり、表示されるメッセージは、ユーザーがボタンをクリックするまでブロックされないので、メッセージボックスであってはなりません。タイマー間隔はちょうど1分に設定されています。他の形式のロジックは、コーディングロジックが発行されますが、ヘルプが必要な場合は、コードを投稿してください。 – Trey

+0

PLzはこれまでに試したコードを共有しています。 –

+0

@Trey MessageBoxはタイマーをブロックしません。 – LarsTech

答えて

0

あなたはこの中にいくつかの質問を積み重ねているので、私はあなたの主なものであるタイマーに焦点を合わせます。複数のフォームを使用して非侵入的な方法で時間を維持することが可能かどうかについての質問をすばやく要約すると、そうですが、具体的に別の質問を投稿する必要があります。

私はTreyに同意し、タイマーを使用します。これがWinFormsアプリケーションかWPFアプリケーションかは言及していませんが、どのタイプに応じてタイマーを選択するかはわかります。

コンソールとWinFormsでは、System.Threading.Timerを使用できますが、非同期であることに注意してください。そのため、MessageBoxまたはポップアップフォームを表示する前にUIスレッドに切り替える必要があります。

WPFでは、System.Windows.Threading.DispatcherTimerを使用してSystem.Threading.Timerと同じ機能を提供できますが、UIスレッドではチェックが入ります。

あなたの仕様は、時間が超過してプログラムが終了したことをユーザーに通知することなので、あまりにも邪魔にならないように気にしません。しかし、タイマーが刻々と変化したときに侵入コードが実行されない限り、タイマーは侵入的でもなく、ユーザーに気付かれません。ここで

は(、コンソールまたはWinFormsのWPFで使用することができますが、私はDispatcherTimerを好む)System.Threading.Timerを使用した例です。

Private _TimeExceededTimer As Timer 

Public Sub StartTimeExceededTimer(ByVal duration TimeSpan) 
    _TimeExceededTimer = New Timer(duration.TotalMilliseconds) 
    AddHandler _TimeExceededTimer, AddressOf _TimeExceededTimer_Elapsed 
    _TimeExceededTimer.Start() 
End Sub 

Private Sub _TimeExceededTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) 
    _TimeExceededTimer.Stop() 
    RemoveHandler _TimeExceededTimer, AddressOf _TimeExceededTimer_Elapsed 
    _TimeExceededTimer.Dispose() 
    _TimeExceededTimer = Nothing 
    NotifyUserThatTimeIsUp() 
End Sub 

Private Sub NotifyUserThatTimeIsUp() 
    'At this point display a MessageBox 
    'or another Form used as a popup to 
    'inform the user that their time is up. 
    'Keep in mind that we are NOT on the UI thread, so you will want to switch over to it. 
    MessageBox.Show("Time's up!") 

    'Close the application 
    My.Application.Shutdown() 
    'Or Application.Current.Shutdown() 
End Sub 

私は、これは正しい方向にポイントを願っています。あなたの投稿をさまざまな部分に分割して、残りの質問に答えることができます。

関連する問題