带参数的 Dispatcher.BeginInvoke 操作

发布于 2024-11-26 16:47:21 字数 676 浏览 0 评论 0原文

在处理一些大小调整之前,我使用调度程序来更新我的用户界面。 问题是 BeginInvoke(DispatcherPriorty, new ACTION) 的部分是我陷入困境的地方。 我想用参数调用一个方法,但我不知道为什么。

这是我当前的调度程序:

void s_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(test));

}

这是我正在调用的方法:

public void test()
{
    foreach (Structures s in ((TreeView)this.cont.Children[0]).Items)
        s.updateRelationLines(this.Data, this.cont.ColumnDefinitions[1]);
}

我只想替换 this.Data 和 this.cont.Columndefinitions[1] 以及参数。

I'm using a Dispatcher to update my UI before I handle some resiszing.
The Problem ist the part of BeginInvoke(DispatcherPriorty, new ACTION) is where I am stuck.
I want to call a method with Parameters and I don"t know why.

Thats my current Dispatcher:

void s_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(test));

}

And this is my method i am calling:

public void test()
{
    foreach (Structures s in ((TreeView)this.cont.Children[0]).Items)
        s.updateRelationLines(this.Data, this.cont.ColumnDefinitions[1]);
}

I just want to replace this.Data and this.cont.Columndefinitions[1] with Parameters.

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

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

发布评论

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

评论(2

天涯离梦残月幽梦 2024-12-03 16:47:21

您可以为此使用 lambda 表达式:

Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, 
    new Action(() => test(param1, param2)));

这基本上会创建一个匿名方法

void myMethod() {
    test(param1, param2);
}

并通过调度程序调用该方法。一些编译器魔法可确保 param1 和 param2 可供此方法使用,即使它们仅位于 s_SizeChanged 方法的范围内。有关此内容的更多详细信息,请访问:

You can use a lambda expression for this:

Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, 
    new Action(() => test(param1, param2)));

This basically creates an anonymous method

void myMethod() {
    test(param1, param2);
}

and invokes this method through the dispatcher. Some compiler magic ensures that param1 and param2 are available to this method, even if they are only in the scope of your s_SizeChanged method. More details on this can be found here:

秋意浓 2024-12-03 16:47:21

您应该能够执行以下操作:

Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action<Type1, Type2>(test), type1, type2);

使用如下回调:

public void test(Type1 type1, Type2 type2) {
        foreach (Structures s in ((TreeView)this.cont.Children[0]).Items)
            s.updateRelationLines(type1, type2);
    }

You should be able to do:

Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action<Type1, Type2>(test), type1, type2);

With a callback like:

public void test(Type1 type1, Type2 type2) {
        foreach (Structures s in ((TreeView)this.cont.Children[0]).Items)
            s.updateRelationLines(type1, type2);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文