私は製造テスト環境でコーディングの一部を手伝っている技術者です。具体的な質問は、C#のイベントを処理することです。 Button_clickだけでなく、特にシリアルポート経由のデータストリームがあり、シリアルポート経由で入ってくるものに応じてリアルタイムでUIを更新する必要がある場合は特にそうです。シリアルポートデータによってトリガされたC#イベントからUIを更新するにはどうすればよいですか?
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) {
input = (sender as SerialPort).ReadLine();
if (input.Contains("look for this"))
this.Invoke(new EventHandler(doSomething));
}
し、何かのように:
void OnGotData(object sender, EventArgs e) {...};
delegate void UpdateCallback(data d);
void doSomething(data d) {
...
if (field.InvokeRequired) {
UpdateCallback x = doSomething;
this.Invoke(x, new object[] { d });
}
else {
field.Text = d;
}
...
}
トレードオフはどのようなものがあり、私は両方が最終的に同じことを行う二つのアプローチを持っている場合たとえば、との違いは何ですか?畳み込まれた第2のアプローチは大会の問題なのですか?リアルタイムパフォーマンスが重要な場合にはどこからでも最初のアプローチを使用することができますか?
二スニペットは非常に紛らわしいです。それは何もしません...デリゲートインスタンスを作成し、それを 'd'変数に代入し、不明なメソッドを宣言し、コンパイルしないデリゲートを宣言します。 –
これは最新の編集で修正する必要があります。コード内の省略記号( "...")は、もともとは分かりやすくするために省略した他のコードの行です。私が知りたいのは、2つのアプローチの間に実際の違いがあった場合です(第2のアプローチが構文的に正しいと仮定し、実際に何かを行ったと仮定して)。 – TerrorTech
構文をより正確にするために、詳細を追加しました。私は明確にするために物事を難読化しており、2つのアプローチの違いの一般的な考え方をもっと探しています。 – TerrorTech