初期処理・終了処理スケルトン

  ApplicationEvents.vb による開始・終了



  
Namespace My

	Partial Friend Class MyApplication

		Private Sub MyApplication_Startup(ByVal sender As Object, _
		ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs _
		) Handles Me.Startup

			' アプリケーションレベルの初期化

		End Sub

		Private Sub MyApplication_Shutdown(ByVal sender As Object, _
		ByVal e As System.EventArgs) Handles Me.Shutdown

			' アプリケーションレベルの最終処理

		End Sub

	End Class

End Namespace
  

※ 関連ページ



  スレッド処理付き、雛型



  
Imports System.Threading

Public Class Form1

	' スレッドの終了をコントロールするフラグ
	Private stopFlg As Integer = 0

	' ************************************************************
	' ロード前の初期処理 (1)
	' ************************************************************
	Sub New()

		' この呼び出しは、Windows フォーム デザイナで必要です。
		InitializeComponent()

	End Sub

	' ************************************************************
	' コントロール作成時
	' ************************************************************
	Protected Overrides Sub OnCreateControl()

		' (2)

		' この処理を実行中に、Load イベントが発生します
		MyBase.OnCreateControl()

		' (4)

	End Sub

	' ************************************************************
	' 初期処理 (3)
	' ************************************************************
	Private Sub Form1_Load(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Load

		' スレッド処理するメソッドを作成
		Dim ThreadProc As New Thread(AddressOf ThreadEntry)
		' スレッド開始
		ThreadProc.Start()

	End Sub

	' ************************************************************
	' フォーム表示後の初期処理 (5)
	' ************************************************************
	Private Sub Form1_Shown(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Shown

	End Sub

	' ************************************************************
	' スレッドの入り口
	' ************************************************************
	Private Sub ThreadEntry()

		Dim Bridge As New ProcBridge(AddressOf SetData)

		' 参照する為に、常に 0 で比較後等しければ 0 をセット。1 の時にループ終了
		Do While Interlocked.CompareExchange(stopFlg, 0, 0) = 0

			Thread.Sleep(1000)

			Console.WriteLine(Now)

			Me.Invoke(Bridge, New Object() {1, Now.ToString()})

		Loop

		' 実際の終了を通知する
		Me.Invoke(Bridge, New Object() {-1, "終了処理中です..."})

	End Sub

	' ************************************************************
	' 橋渡し用デリゲート
	' ************************************************************
	Delegate Sub ProcBridge(ByVal type As Integer, ByVal str As String)

	' ************************************************************
	' 橋渡し用実体
	' ************************************************************
	Private Sub SetData(ByVal type As Integer, ByVal str As String)

		If type = 1 Then
			Me.TextBox1.Text = str
		End If
		If type = -1 Then
			Me.TextBox2.Text = str
			' 強制描画
			Me.TextBox2.Update()
			Thread.Sleep(1000)
			' 終了通知うけて、実際終了する
			' ( FormClosing と FormClosed が発生する )
			Application.Exit()
		End If

	End Sub


	' ************************************************************
	' フォームが閉じる前( e.Cancel = True でキャンセル可能 )
	' ************************************************************
	Private Sub Form1_FormClosing(ByVal sender As System.Object, _
	ByVal e As System.Windows.Forms.FormClosingEventArgs) _
	Handles MyBase.FormClosing

		' スレッド実行中ならば、スレッドが終了する状態にして、終了処理をキャンセル
		If Interlocked.CompareExchange(stopFlg, 0, 0) = 0 Then
			Interlocked.Exchange(stopFlg, 1)
			e.Cancel = True
		End If

	End Sub

	' ************************************************************
	' フォームが閉じた後
	' ************************************************************
	Private Sub Form1_FormClosed(ByVal sender As System.Object, _
	ByVal e As System.Windows.Forms.FormClosedEventArgs) _
	Handles MyBase.FormClosed


	End Sub
End Class
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ