在处理一些电阻之前,我正在使用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.Data
和this.cont.Columndefinitions[1]
。
答案 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);
}