Winform アプリケーション。バックグラウンド スレッドは MQ からメッセージを取得し、UI スレッドで変更を行います。
カスタムリストを更新するには、このメソッドを呼び出す必要があります
private void UpdateList()
{
if (ctrlLabel.IsHandleCreated)
{
ctrlLabel.Invoke(new Action(() =>
{
//Do Something
}
));
}
ctrlListView.Data = package;
//MARK
ctrlListView.Invoke(new Action(() =>
{
ctrlListView.LoadData();
}
));
//MARK
}
このメソッドは、バックグラウンド スレッドによって 2 回とも呼び出されます。ただし、これは、コントロールが新たにインスタンス化された後の最初の呼び出しでは機能します。
アイテムを削除して更新しようとすると、Null Exception Errors でエラーが発生します。
興味深いことに、いくつかの小さな変更でこれを実行できました。[Control].Invoke を単に Invoke に変更したところ、機能しました (2 回目の呼び出しのみ)。
//MARK
Invoke(new Action(() =>
{
ctrlListView.LoadData();
}
));
//MARK
では、Invoke と [control].Invoke はどのように動作が異なるのでしょうか?
Win7、.Net 4.0 で見られる