2017年9月28日 星期四

C# ObservableCollection 此類型的 CollectionView 不支援從 與發送器執行續不同的執行緒變更其SourceCollection

今天撰寫OPC Server遇到一個問題是 我的OPCServerSource已經跟UI的TreeView綁定了 可是我又透過OPC Client去取得Browser的Server的資料 再要將Server資料匯入到OPCServerSource時,出現如圖下的錯誤。



解決的方法是在要匯入的地方加入Application.Current.Dispatcher.BeginInvoke((Action)delegate () {};這行,就可以解決問題了

private void ServerBrowserItemsUI(List serverList)
{
  Application.Current.Dispatcher.BeginInvoke((Action)delegate ()
  {
    serverList.ToList().ForEach(args =>
    {
    OPCServerSource.Add(new Model.OPCServer() { ProgName = args.progID, ProgID = args.clsid.ToString(), Url = new System.Windows.Media.Imaging.BitmapImage(new Uri(@"/OPCDASettingWPFLib;component/Common/Images/lightIcon_green_20.png", UriKind.RelativeOrAbsolute)) });
    });
  });
}

沒有留言:

張貼留言