私は1つのメインウィンドウフォームを持ち、そのフォーム内にはアプリケーションの異なるスクリーンを表すカスタムコントロールがあります。このコントロールの子コントロールにアクセスしたいです。私がここに来ていないことがあります...時々私はこのエラーを受け取ります:C#windowsはカスタムコントロールのクロススレッド操作をフォームします
Cross-thread operation not valid: Control 'lblText' accessed from a thread other than the thread it was created on.
時にはすべてが正常に動作します。私はcompletelly理由は理解していない...おそらく何か外部デバイス(MEI BillAcceptor)は、(Form1クラス内の)イベントのコントロールに変更を行います...私は単純なコードを書くことができます...
//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を使用する必要がありますか? "またはどのように私はアプリケーションにあまり変更でこれを解決するのです...