アクセス数 累計:000,125,058 昨日:000,000,099 本日:000,000,080
|
|
|
|
【Amazon ランキング:本 - 資格・検定・就職】
|
|
今回は、前回作成した独自のスレッド管理クラスを実際に使った画面を作って見ようと思います。 |
|
ワーカークラス |
前回作ったワーカーベースクラスを継承してワーカークラスを作成します。 |
VB[WorkerClass2.vb] |
Imports System.Threading
' ワーカークラス2
Public Class WorkerClass2 : Inherits WorkerBaseClass
Private _progress As Integer = 0
' ステータスプロパティ
Public ReadOnly Property Status() As String
Get
Dim sts As String = String.Empty
Select Case WorkerStatus
Case worker_status.Standby
sts = "待機中..."
Case worker_status.Running
sts = String.Format("処理中 {0}%", _progress)
Case worker_status.End
sts = "処理終了"
Case worker_status.Error
sts = "処理エラー"
Case worker_status.Aborted
sts = "強制終了"
End Select
Return sts
End Get
End Property
' ワーカー処理
Protected Overrides Sub WorkerProcess()
For i As Integer = 0 To 100
_progress = i
System.Threading.Thread.Sleep(100)
Next
End Sub
End Class
|
|
C#[WorkerClass2.cs] |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ThreadCS
{
// スレッドワーカークラス
public class WorkerClass2 : WorkerBaseClass
{
private int _progress = 0;
// ステータスプロパティ
public string Status
{
get
{
string sts = string.Empty;
switch (WorkerStatus)
{
case worker_status.Standby:
sts = "待機中...";
break;
case worker_status.Running:
sts = string.Format("処理中 {0}%", _progress);
break;
case worker_status.End:
sts = "処理終了";
break;
case worker_status.Error:
sts = "処理エラー";
break;
case worker_status.Aborted:
sts = "強制終了";
break;
}
return sts;
}
}
// ワーカー処理
protected override void WorkerProcess()
{
for (int i = 0; i <= 100; i++)
{
_progress = i;
System.Threading.Thread.Sleep(100);
}
}
}
}
|
|
スレッド管理クラス |
|
Form3 に ListBox, Button,Timer をはりつけます。
プロパティの内容はすべてデフォルトです。
ListBox:[ListBox1]
Button:[button1]
Button:[button2]
Timer:[Timer1]
|
|
VB[Form3.vb] |
Public Class Form3
Private _workerList As List(Of WorkerClass2)
' スレッド管理クラス
Private _threadMng As ThreadManager
Public Sub New()
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
' インスタンス作成
_workerList = New List(Of WorkerClass2)()
' スレッド管理クラス
_threadMng = New ThreadManager()
End Sub
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
' タイマー開始
Me.timer1.Interval = 500
Me.timer1.Start()
End Sub
Private Sub Form3_FormClosed( _
ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) _
Handles Me.FormClosed
' スレッド強制終了
_threadMng.Abort()
End Sub
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles button1.Click
' ワーカークラス作成してリストに登録
Dim wk As WorkerClass2 = New WorkerClass2()
_workerList.Add(wk)
' スレッド管理クラスに登録する
_threadMng.AddWorkerThread(wk)
End Sub
Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles button2.Click
' スレッド強制終了
_threadMng.Abort()
End Sub
Private Sub timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles timer1.Tick
Me.timer1.Enabled = False
Try
' ちらつき防止!
Me.listBox1.BeginUpdate()
Dim num As Integer = 1
Me.listBox1.Items.Clear()
For Each wk As WorkerClass2 In _workerList
' リストボックス追加
Me.listBox1.Items.Add( _
String.Format("{0:00}:{1}", _
num, wk.Status))
num = num + 1
Next
Finally
' ちらつき防止!
Me.listBox1.EndUpdate()
End Try
Me.timer1.Enabled = True
End Sub
End Class
|
|
C#[Form3.cs] |
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ThreadCS
{
public partial class Form3 : Form
{
private List<WorkerClass2> _workerList = null;
// スレッド管理クラス
private ThreadManager _threadMng = null;
public Form3()
{
InitializeComponent();
// インスタンス作成
_workerList = _workerList = new List<WorkerClass2>();
_threadMng = new ThreadManager();
}
private void Form3_Load(object sender, EventArgs e)
{
// タイマー開始
this.timer1.Interval = 500;
this.timer1.Start();
}
private void Form3_FormClosed(object sender, FormClosedEventArgs e)
{
// スレッド強制終了
_threadMng.Abort();
}
private void button1_Click(object sender, EventArgs e)
{
// ワーカークラス作成してリストに登録
WorkerClass2 wk = new WorkerClass2();
_workerList.Add(wk);
// スレッド管理クラスに登録する
_threadMng.AddWorkerThread(wk);
}
private void button2_Click(object sender, EventArgs e)
{
// スレッド強制終了
_threadMng.Abort();
}
private void timer1_Tick(object sender, EventArgs e)
{
this.timer1.Enabled = false;
try
{
// ちらつき防止!
this.listBox1.BeginUpdate();
int num = 1;
this.listBox1.Items.Clear();
foreach (WorkerClass2 wk in _workerList)
{
// リストボックス追加
this.listBox1.Items.Add(
string.Format("{0:00}:{1}",
num, wk.Status));
num++;
}
}
finally
{
// ちらつき防止!
this.listBox1.EndUpdate();
}
this.timer1.Enabled = true;
}
}
}
|
|
|
※このページで紹介しているサンプルコードについて管理者は動作保障をいたしません※
※サンプルコードを使用する場合は、自己責任でお願いします※
|
【楽天 ランキング:スマートフォン】
|
|
|
|
このサイトはフリーソフトのMerge HTMLで作成されています。
このサイトはリンクフリーです。
|
ページの先頭に戻る |
Copyright© 2010-2015 Jun.Shiozaki All rights reserved. |
|
|
|