.NET Framework4.5
言語:Visual Basic
Windowsフォームアプリケーション
いつもお世話になっております。
また皆様のお力を借りたく、質問させて頂きます。
色々なことの勉強の為にTCP通信を用いてクライアント側から文字が送信されたらサーバー側が返事をするようなアプリを作ろうとしています。
TCP通信をサブスレッドで行っており、サブスレッドからフォームのコントロールを操作して、テキストボックスに送受信文字を書き込みたいです。
メインスレッド、サブスレッドをあまり意識せずにテキストボックスに送受信文字を書き込めるようにしたい為、ネットのサンプルを流用し、モジュールにSetAppendTextというメソッドを作りました。
Public Sub SetAppendText(ByVal target As TextBox, ByVal value As String) Try 'Dim ac As New Action(Of String)(Sub(v) target.Text = v) Dim ac As New Action(Of String)(Sub(v) target.AppendText(v + vbCrLf)) If target.InvokeRequired Then target.Invoke(ac, New Object() {value}) Else ac(value) End If Catch ex As ObjectDisposedException Return End Try End Sub
↑のメソッドを使って、サブスレッド側でフォームと書き込みたい文字を引数に渡しているのですが、テキストボックスに表示されません。(Formクラスと別スレッドを開始しているクラスは別です。これを同じクラスにすると文字の書き込みは行われます。)
おそらく、渡している引数が悪いと思うのですが、いまひとつ原因がわかりません。
この質問内容だけではプログラム全体が把握できないと思うので、該当のプログラムをこちらからDLしてもらい見てもらえれば幸いです。↓
リンク内容(PASSWORD:今年の西暦4桁を数字で)
プロジェクトが二つ(クライアント側とサーバー側)入っています。
スタートボタンで接続を開始してもらい、クライアント側で何か文字を送っていただければ、クライアント側には送信文字と受信文字がテキストボックスに書き込まれると思います。
質問該当箇所(例)
'//ログの書き込み CommonMethod.SetAppendText(ServerForm.LogTextArea, "クライアントが接続しました。") CommonMethod.SetAppendText(ServerForm.LogTextArea, "接続停止 " + ex.ToString()) 'ログへの書き込み CommonMethod.SetAppendText(ServerForm.LogTextArea, "クライアントが切断されました。")
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/24 11:29
2017/02/24 12:50
2017/02/25 13:09