WPF跨线程对象访问

And*_*ley 1 .net c# wpf multithreading

我有一个关于WPF中的跨线程调用的问题.

            foreach (RadioButton r in StatusButtonList)
        {
            StatusType status = null;
            r.Dispatcher.Invoke(new ThreadStart(() => status= ((StatusButtonProperties)r.Tag).StatusInformation));
            if (AppLogic.CurrentStatus == null || AppLogic.CurrentStatus.IsStatusNextLogical(status.Code))
            {
                SolidColorBrush green = new SolidColorBrush(Color.FromRgb(102, 255, 102));
                r.Dispatcher.Invoke(new ThreadStart(() =>  r.Background = green));
            }
            else
            {
                SolidColorBrush red = new SolidColorBrush(Color.FromRgb(255, 0, 0));
                r.Dispatcher.Invoke(new ThreadStart(() => r.Background = red));
            }
        }
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,它在第一次迭代时正常工作.但是在第二次迭代期间,该行:

  r.Dispatcher.Invoke(new ThreadStart(() => status= ((StatusButtonProperties)r.Tag).StatusInformation))
Run Code Online (Sandbox Code Playgroud)

导致此异常:

Cannot use a DependencyObject that belongs to a different thread than its parent Freezable.
Run Code Online (Sandbox Code Playgroud)

我尝试了一些解决方案,但我找不到任何可行的方法.

任何帮助赞赏!

Tho*_*mar 5

我将其重写为:

r.Dispatcher.Invoke(new Action(delegate()
{
    status = ((StatusButtonProperties)r.Tag).StatusInformation;

    if (AppLogic.CurrentStatus == null || AppLogic.CurrentStatus.IsStatusNextLogical(status.Code))
    {
        r.Background = Brushes.Green;
    }
    else
    {
        r.Background = Brushes.Red;
    }

}));
Run Code Online (Sandbox Code Playgroud)