C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: マルチスレッドで複数の引数を渡す方法


(過去ログ 138 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■80994 / inTopicNo.1)  マルチスレッドで複数の引数を渡す方法
  
□投稿者/ トトロ (1回)-(2016/08/23(Tue) 19:58:43)

分類:[.NET 全般] 


VBで以下の方法でマルチスレッドで別のsubを実行することができます。


MultiProgram_run = New System.Threading.Thread( _
New System.Threading.ParameterizedThreadStart(AddressOf Program_run1xx))

MultiProgram_run.IsBackground = True

MultiProgram_run.Start(param)


しかし、この方法で二つ以上の引数をもつsubを設定しても
○○と互換性のあるシグネチャがありません。
というエラーが表示されてビルドすることができません。

複数の引数を渡すにはどうしたら良いのでしょうか?

また、なぜ複数の引数を渡せる仕様ではないのでしょうか?
一つ渡せるのなら複数も渡せると思うのですが。

自分なりの解決策としては
配列を使うかパブリック変数を使うかだと思いますが
もっと良い方法があれば教えてください。




引用返信 編集キー/
■80995 / inTopicNo.2)  Re[1]: マルチスレッドで複数の引数を渡す方法
□投稿者/ Azulean (693回)-(2016/08/23(Tue) 21:56:25)
2016/08/23(Tue) 21:57:50 編集(投稿者)

No80994 (トトロ さん) に返信
> 複数の引数を渡すにはどうしたら良いのでしょうか?

渡したい引数を持つクラスを自作してください。
クラスの自作が微妙なら Tupple を使いましょう。

(あるいは、ラムダを書くとか)

> また、なぜ複数の引数を渡せる仕様ではないのでしょうか?
> 一つ渡せるのなら複数も渡せると思うのですが。

逆に言えば、1つ渡せれば、クラスを自作できる以上、十分とも言えます。
引用返信 編集キー/
■80996 / inTopicNo.3)  Re[1]: マルチスレッドで複数の引数を渡す方法
□投稿者/ もりお (17回)-(2016/08/23(Tue) 23:20:55)
No80994 (トトロ さん) に返信

インスタンス変数を使う方法

    Sub Main()
        Dim MultiProgram_run = New Thread(AddressOf New User("シン", "ゴジラ").Program_run1xx)
        MultiProgram_run.Start()
    End Sub

    Class User
        ReadOnly FirstName As String
        ReadOnly LastName As String

        Sub New(firstName As String, lastName As String)
            Me.FirstName = firstName
            Me.LastName = lastName
        End Sub

        Sub Program_run1xx()
            Debug.WriteLine(FirstName & LastName)
        End Sub
    End Class


引数を渡す方法

    Sub Main()
        Dim MultiProgram_run = New Thread(AddressOf Program_run1xx)
        MultiProgram_run.Start(New User("シン", "ゴジラ"))
    End Sub

    Class User
        Public ReadOnly FirstName As String
        Public ReadOnly LastName As String

        Sub New(firstName As String, lastName As String)
            Me.FirstName = firstName
            Me.LastName = lastName
        End Sub
    End Class

    Sub Program_run1xx(arg As Object)
        Dim User As User = DirectCast(arg, User)
        Debug.WriteLine(User.FirstName & User.LastName)
    End Sub


フィールドを共有する方法

    Dim FirstName As String
    Dim LastName As String
    ReadOnly GozillaLock As New Object()

    Sub Main()
        SyncLock GozillaLock
            FirstName = "シン"
            LastName = "ゴジラ"
        End SyncLock

        Dim MultiProgram_run = New Thread(AddressOf Program_run1xx)
        MultiProgram_run.Start()
    End Sub

    Sub Program_run1xx()
        SyncLock GozillaLock
            Debug.WriteLine(FirstName & LastName)
        End SyncLock
    End Sub

私が思いついたのは3つでした。

引用返信 編集キー/
■81004 / inTopicNo.4)  Re[2]: マルチスレッドで複数の引数を渡す方法
□投稿者/ トトロ (4回)-(2016/08/24(Wed) 18:21:43)
皆さんご回答ありがとうございます。
いろいろと試してみます。
 
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -