将 BeginInvoke 代码从 Winforms 转换为 Wpf

发布于 2024-12-22 21:19:59 字数 544 浏览 2 评论 0原文

在尝试转换以下代码失败后,我发现 ISynchronizeInvoke 无法在 WPF 中使用。有人可以帮忙吗?

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);
            }
        }
    }
}

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);
            }
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

罪#恶を代价 2024-12-29 21:19:59

如果 NewTp 是 UIElement,那么您需要转换为 UIElement 并调用 UIElement.Dispatcher.BeginInvoke

var NewTp = (UIElement)A_C.Target;
if (NewTp != null)
{
    NewTp.Dispatcher.BeginInvoke(A_C, data);
}

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文