忍者ブログ
暇人おやじの暇なつぶやき
[2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

■進行状態を確認してみる2

昨日のBackgroundWorkerのテストプログラムにProgressBarを付けてみよう
ProgressBarは処理の進行状況をビジュアルに表示するコンポーネントである

標準では最低値0から最大値100となっていおり、現在値を表すvalueに値を設定することで
状態を表示する

昨日のプログラムは1から5までを1秒毎に通知し、5で終了するものだ
したがって、進行状況を管理するイベントProgressChangedに渡る数値(パーセンテージ)は
1から順に5までとなる

ではこの数値を最大値100とするProgressBarに当てはめるには単純に数値を20倍すれば
問題ない

逆にするなら、ProgressBarの最大値を5としてもOKだ

    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        TextBox1.Text += "..."
        TextBox1.Text += e.ProgressPercentage.ToString
        TextBox1.Text += vbCrLf
        ProgressBar1.Value = e.ProgressPercentage * 20
    End Sub
bg_pber.JPG

PR
■BackgroundWorkerコンポーネントについてのメモ

BackgroundWorkerはスレッド処理を行うコンポーネントであり
非常に簡単にスレッドを追加してくれます

またreportsprogressプロパティを設定することによりスレッドの進行内容の通知が確認できます
suportscancellationプロパティを設定することでスレッドの途中キャンセルも正確に行なえます

進行状況の通知を行なうには、実はアプリケーションで状態を通知する必要があります
これは、スレッド実行イベント(dowork)内にてchangeprogressイベントを呼び出します

次の例はフォームにボタン、テキストボックス、バックグランドワーカーを設置して簡単なスレッドの
テストを行なうものです

スレッドの実体である dowork イベントに
       Dim cnt As Integer = 0

        While cnt < 5
            System.Threading.Thread.Sleep(1000)
            cnt += 1
            BackgroundWorker1.ReportProgress(cnt)
        End While

進行状態を処理するイベント ProgressChanged に
        TextBox1.Text += "..."
        TextBox1.Text += e.ProgressPercentage.ToString
        TextBox1.Text += vbCrLf

そしてスレッドが終了時に通知されるイベント RunWorkerCompleted に
        TextBox1.Text += "End Of Thread!!"

起動させるために、ボタンに次のコードを
        BackgroundWorker1.RunWorkerAsync()

これで、簡単な確認が出来ます
ReportProgressに値(cnt)を渡していますが、これが進行状態のパーセンテージ値になり
実体のイベント ProgressChanged に e.ProgressPercentage として渡ることになります
実はパーセンテージ自体はアプリケーション側で対応しないとならず、この数値は実際の
パーセンテージを表しているわけでは無いのです


■自分のマシン名の表示

マイコンピュータ名のプロパティを表示してコンピュータ名を表示してみる
これをプログラムで取得する場合、以前はsocketから色々と複雑な処理をおこなわないと
取得できなかった

ところが、.NETのDns.GetHostName メソッドを利用すると簡単に取得できる

以下は、フォームにボタンとリッチエディットを付けただけのプログラムで
コマンドボタンを押した際のコード

        Dim Host As String
        Try
            Host = System.Net.Dns.GetHostName()
            RichTextBox1.AppendText("Computer name :" & Host)
        Catch ex As Exception
            RichTextBox1.AppendText("Exception catch!!!")
            RichTextBox1.AppendText(vbCrLf)
            RichTextBox1.AppendText("Source :" + ex.Source)
            RichTextBox1.AppendText(vbCrLf)
            RichTextBox1.AppendText("Message :" + ex.Message)
            RichTextBox1.AppendText(vbCrLf)
        End Try


これで、リッチエディットに表示されるのでR
とあるプロジェクトでVB5のプログラムをいじくる事になった

現代のこの時点において、VB5の開発TOOLを入手、整えるのは困難なので
これをVB.NETに移行しようじゃないかと、言うことにしたのだが、これがなかなか困難を極める

そこで、いったんVB6.0にすることにした
幸いVB6.0の開発用環境はあったので、すんなりとプロジェクトの読込はうまくいった

しかしながら、これからの事を考えるとVB6.0のままでは良くないのであろう
これから先はVB.NETへの移行作業日記になるような感じでR

ユーザー作成のDLLは読めるのか?
構造体をDLLにどう渡すのか?
固定長Stringはどう扱うのか?

色々と困難な事が待ち受けていそうな、2008年末になりそうだ

■プログラムをテストする

出来上がったプログラムを他のマシンでテストする際に注意する点

通常VC++2008のIDEでのプログラミングはソリューションフォルダに
debugフォルダが生成され、そこに目的のプログラムが生成される

そのため、このプログラムを他のマシンで試そうとコピーしてもっていっても
起動しない
何故ならデバッグ環境ではないから

ではどうするか?

プログラムをrelease環境でビルドするのだ
IDE上部に「Debug」「Release」の切り替えがあるので、これをReleaseにして
ビルドすれば、releaseフォルダに生成されるので、これで他のマシンで確認する
ことが出来るようになる

他のマシン=該当する.NETが入っているマシン

■文字列を整える「PadRight」

入力されたテキストは往々にして文字数が足らないことがある
そんな時にPadRightを使うと、簡単に文字数を整えて、なおかつ文字の右側を
空白でうめてくれるので便利だ

左を埋める場合には「PadLeft」

textBox3->Text = tarMoji->PadRight(10);

tarMojiに「ABC」が入っていたとしよう、この場合textBox3->Textには
「ABC□□□□□□□」(□=スペース)となる
固定長のデータを扱いたい場合には重宝しそうなメソッドである

ホストのデータでx'15'のデータをString型に入れるために
ホストのデータをいったん「@」に変換する
これを行わないと、x'15'は改行になってしまう

その後、「@」をx'15'として出力する
Convert::ToChar を使う

 if (textBox1->Text[wi] == '@')
                     {
                         wData = wData + System::Convert::ToChar(0x15)



忍者ブログ [PR]
カレンダー
08 2024/09 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
フリーエリア
最新CM
最新TB
プロフィール
HN:
忍者 シオ才
性別:
非公開
バーコード
ブログ内検索