1

I have found out that ISynchronizeInvoke cannot be used in WPF after having tried to convert the following code unsuccessfully. Can anybody help?

private static void EVENT_R(Delegate @event, object[] data)
{
    if (@event != null)
    {
        foreach (var A_C in @event.GetInvocationList())
        {
            var NewTp = (ISynchronizeInvoke)A_C.Target;
            if (NewTp != null && NewTp.InvokeRequired)
            {
                NewTp.BeginInvoke(A_C, data);
            }
            else
            {
                A_C.DynamicInvoke(data);
            }
        }
    }
}
WrightsCS
  • 50,551
  • 22
  • 134
  • 186

1 Answers1

0

If NewTp is a UIElement, then you need to cast to UIElement and call UIElement.Dispatcher.BeginInvoke:

var NewTp = (UIElement)A_C.Target;
if (NewTp != null)
{
    NewTp.Dispatcher.BeginInvoke(A_C, data);
}
Dave Clemmer
  • 3,741
  • 12
  • 49
  • 72
Tomislav Markovski
  • 12,331
  • 7
  • 50
  • 72
  • Thanks, your first answer I had already looked at but it didn't quite match the code I am using. This answer is perfect ... all with the minimum amount of code! – user1114644 Dec 24 '11 at 15:51