あなたはこの中にいくつかの質問を積み重ねているので、私はあなたの主なものであるタイマーに焦点を合わせます。複数のフォームを使用して非侵入的な方法で時間を維持することが可能かどうかについての質問をすばやく要約すると、そうですが、具体的に別の質問を投稿する必要があります。
私は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
私は、これは正しい方向にポイントを願っています。あなたの投稿をさまざまな部分に分割して、残りの質問に答えることができます。
短い答えは、経過時間をチェックするタイマーです。つまり、表示されるメッセージは、ユーザーがボタンをクリックするまでブロックされないので、メッセージボックスであってはなりません。タイマー間隔はちょうど1分に設定されています。他の形式のロジックは、コーディングロジックが発行されますが、ヘルプが必要な場合は、コードを投稿してください。 – Trey
PLzはこれまでに試したコードを共有しています。 –
@Trey MessageBoxはタイマーをブロックしません。 – LarsTech