メイン ウィンドウ フォームが 1 つあり、そのフォーム内にアプリケーションのさまざまな画面を表すカスタム コントロールがあります。このコントロールの子コントロールにアクセスしたい。ここで得られないことがあります...時々、このエラーが発生します:
クロススレッド操作が無効です: スレッドからアクセスされたコントロール 'lblText' 作成されたスレッド以外。
しかし、すべてがうまくいくこともあります。エラーの理由が完全にはわかりません...おそらく、コントロールに変更を加えるイベント(Form1クラス内)を持つ外部デバイス(MEI BillAcceptor)の何か...簡単なコードを書きましょう...
//user control
public partial class Screen2 : UserControl
{
public void changeValue(string txt)
{
lblText.Text = txt;
}
}
特定のイベントが発生すると、メソッド changeValue が form1 から呼び出されます...
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
BillAcceptor.SomeBillAcceptorEvent +=
new SomeBillAcceptorEventHandler(changeText);
}
private void changeText(object sender, EventArgs args)
{
_screen2.changeValue("some text");
}
}
したがって、最も厄介なことは、すべてが実際に機能する場合があることです...だから私の質問は、「ここで Invoke を使用する必要がありますか?」または、アプリケーションへの変更を少なくしてこれを解決するにはどうすればよいですか...