Visual Basic .NET または Visual Basic 2005 でスレッドを作成する方法

文書翻訳 文書翻訳
文書番号: 315577 - 対象製品
この記事は、以前は次の ID で公開されていました: JP315577
すべて展開する | すべて折りたたむ

目次

概要

この資料では、Microsoft Visual Basic .NET または Microsoft Visual Basic 2005 の Windows アプリケーションでスレッドを作成する方法について説明します。System.Threading 名前空間には、スレッドの処理で使用する必要があるクラスが用意されています。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft Windows 2000 または Microsoft Windows XP
  • Microsoft Visual Basic .NET または Microsoft Visual Basic 2005
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • Visual Basic .NET のプログラミングまたは Visual Basic 2005 のプログラミング
  • Visual Studio .NET または Visual Studio 2005 の統合開発環境 (IDE)
  • デリゲートとスレッド処理に関する一般的な知識
  • Visual Basic .NET または Visual Basic 2005 に関する一般的な知識

スレッドを使用した Visual Basic .NET または Visual Basic 2005 のアプリケーションの作成

  1. Microsoft Visual Studio .NET または Microsoft Visual Studio 2005 を起動します。
  2. ThreadWinApp という名前の新しい Visual Basic Windows アプリケーションを作成します。
  3. フォームに Button コントロールを 1 つ追加します。このコントロールにはデフォルトで Button1 という名前が付けられています。
  4. フォームに ProgressBar コンポーネントを 1 つ追加します。このプログレス バーにはデフォルトで ProgressBar1 という名前が付けられています。
  5. フォームを右クリックし、[コードの表示] をクリックします。
  6. ファイルの先頭に次のステートメントを追加します。
    Imports System.Threading
    					
  7. 次の Button1 の Click イベント ハンドラを追加します。
    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button1.Click
    
        MessageBox.Show("This is the main thread")
    End Sub
    					
  8. Form1 クラスに次の変数を追加します。
    Private trd As Thread
    					
  9. Form1 クラスに次のメソッドを追加します。
    Private Sub ThreadTask()
        Dim stp As Integer
        Dim newval As Integer
        Dim rnd As New Random()
    
        Do
            stp = ProgressBar1.Step * rnd.Next(-1, 2)
            newval = ProgressBar1.Value + stp
            If newval > ProgressBar1.Maximum Then
                newval = ProgressBar1.Maximum
            ElseIf newval < ProgressBar1.Minimum Then
                newval = ProgressBar1.Minimum
            End If
    
            ProgressBar1.Value = newval
    
            Thread.Sleep(100)
        Loop
    End Sub
    						
    : これは、スレッドの基になるコードです。このコードは、ProgressBar1 の値をランダムに増減し、100 ミリ秒待機してから処理を継続する無限ループです。
  10. 次の Form1 の Load イベント ハンドラを追加します。このコードでは、新しいスレッドを作成し、作成したスレッドをバックグラウンド スレッドに設定した後、スレッドを開始します。
    Private Sub Form1_Load( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load
    
        trd = New Thread(AddressOf ThreadTask)
        trd.IsBackground = True
        trd.Start()
    End Sub
    					

動作の検証

  1. アプリケーションをビルドして実行します。プログレス バーの値がランダムに変化します。これが、動作中の新しいスレッドに相当します。
  2. メイン スレッドが、プログレス バーの値を変更するスレッドから独立していることを示すには、フォーム上のボタンをクリックします。メッセージ ボックスに次のメッセージが表示されます。
    This is the main thread
    							
    入力せずに待機します。プログレス バーの値が変化し続けることを確認してください。

トラブルシューティング

より複雑なアプリケーションでは、共有変数にアクセスするときに複数のスレッドを同期する必要があります。詳細については、Visual Basic オンライン ヘルプ ドキュメントで、「SyncLock ステートメント」および関連トピックを参照してください。

プロパティ

文書番号: 315577 - 最終更新日: 2006年10月3日 - リビジョン: 4.1
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
キーワード:?
kbhowtomaster kbvs2005applies kbvs2005swept KB315577
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com