【www.bbyears.com--WPF】
system.invalidoperationexception
无法使用 dependencyobject,它属于其父 freezable 之外的其他线程。
代码如下:
代码如下private static void PrintBankamsg(SolidColorBrush burshcolor, List
{
Action, SolidColorBrush, HaocaiPositonSatus, int> updateAction =
new Action, SolidColorBrush, HaocaiPositonSatus,int>(Updatebanka);
System.Windows.Application.Current.Dispatcher.BeginInvoke(updateAction, tipcontrollist, burshcolor, posi, holenumber);
}
private static void Updatebanka(List
{
foreach (BankaList bm in BanKaModelllist.OrderBy(a => a._TipsConfig.StructureID))
{
BankaCtrl oneposition = bm.StackPanellist.FirstOrDefault(a => a.ToolTip.ToString() == posi.X + "," + posi.Y);
if (oneposition != null)
{
oneposition.Background = burshcolor;
oneposition.OperStatus = posi.ID.ToString();
oneposition.IsEnabled = false;
if (holenumber > 0)
{
BankaBtn btn= oneposition.FindName("hole"+holenumber) as BankaBtn;
btn.FillColor = burshcolor;
}
break;
}
}
}
这一个线程,异步更新wpf ui的代码。一直没有问题,用方法更新数据也没有问题,但是写成依赖属性后,出现错误了。
public static void ResetBanka( List
{
foreach (BanKaModel bm in BanKaModelList.OrderBy(a => a.StructureID))
{
foreach (HaocaiPositonSatus positon in bm.AllPointList)
{
if (positon != null)
{
positon.Status = 0;
PrintBankamsg(GetStatusColor(0), BanKaModelllist, positon,0);
}
}
}
}
查了半天,发现SolidColorBrush 不能在别的线程生成,然后发给依赖属性。有可能依赖属性是在另一个线程控制的。
改成int传值就行了。
代码如下 private static void PrintBankamsg(int burshcolor, List
{
Action, int, HaocaiPositonSatus, int> updateAction =
new Action, int, HaocaiPositonSatus,int>(Updatebanka);
System.Windows.Application.Current.Dispatcher.BeginInvoke(updateAction, tipcontrollist, burshcolor, posi, holenumber);
}
private static void Updatebanka(List
{
foreach (BankaList bm in BanKaModelllist.OrderBy(a => a._TipsConfig.StructureID))
{
BankaCtrl oneposition = bm.StackPanellist.FirstOrDefault(a => a.ToolTip.ToString() == posi.X + "," + posi.Y);
if (oneposition != null)
{
oneposition.Background = GetStatusColor(burshcolor);
oneposition.OperStatus = posi.ID.ToString();
oneposition.IsEnabled = false;
if (holenumber > 0)
{
BankaBtn btn= oneposition.FindName("hole"+holenumber) as BankaBtn;
btn.FillColor = GetStatusColor(burshcolor);
}
break;
}
}
}