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

わんくま同盟

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

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


■88576 / )  Re[7]: フォームの連続的な書き換えに関して
□投稿者/ パヨンパヨン (2回)-(2018/09/08(Sat) 19:27:53)

ありがとうございます。

確認したところ、ご指摘の通り、
frm.BeginInvoke(Sub() SetText(Form1.TextBox3, i))

としてあるのがエラーの原因で、
frm.BeginInvoke(Sub() SetText(Me.TextBox3, i))
とするとうまくいきました。



> 【問題点1】ラムダ式の遅延評価と変数のスコープ

ラムダ式のことは理解しています。
ご指摘ありがとうございます。


> 【問題点2】既定のフォームインスタンス Form1 と明示的インスタンス frm

> Form1.TextBox3 を扱うために、何故 frm の BeginInvoke を呼び出しているのでしょうか。

これはフォーム上に全てのコードを書いてしまうと長くなって読みづらいので
普段は、別のモジュール上にコードを書いているためです。
他のコードをコピーして流用したため、残ってしまいました。


> 【問題点3】オブジェクトの管理

そうですね、Taskの中でエラーが起こると、
どの箇所にエラーが起きたのか明示的に表示されないので
不便です。




念のため、再度確認なのですが、

''方法1
Invoke(New Action(Of String, String, Color)(AddressOf 複数の引数), x, y, z)

'方法2
'Invoke(Sub() 複数の引数(x, y, z))

''方法3
'Invoke(New MethodInvoker(
' Sub()
' TextBox1.Text = x
' TextBox2.Text = y
' TextBox1.BackColor = z
' End Sub))


という三つの方法をご提示くださりましたが、
これらはどれを使っても計算速度やPC負荷などに全く違いは見られないと考えて良いのでしょうか?
単純に考えると

'方法2
'Invoke(Sub() 複数の引数(x, y, z))

がもっともコードが短く単純なので、ベストチョイスのように思えますが、
使い分けなどがございますでしょうか?


返信 編集キー/


管理者用

- Child Tree -