Dispatcher.BeginInvoke带参数的操作

时间:2011-07-28 14:06:23

标签: c# dispatcher

在处理一些电阻之前,我正在使用Dispatcher来更新我的UI。 问题是BeginInvoke的一部分(DispatcherPriorty,新的行动)是我被困的地方。 我想用 参数调用方法,我不知道为什么。

这就是我目前的Dispatcher:

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.Datathis.cont.Columndefinitions[1]

2 个答案:

答案 0 :(得分:14)

您可以使用lambda表达式:

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

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

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

并通过调度程序调用此方法。一些编译器魔术确保param1和param2可用于此方法,即使它们仅在s_SizeChanged方法的范围内。有关这方面的更多详情,请访问:

答案 1 :(得分:2)

你应该可以这样做:

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