我有一个wpf c#应用程序。调用一组属性更改的更好方法
我会像这样的功能:
private void ReSetScreen()
{
if (!Dispatcher.CheckAccess())
{
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
ucCustomerNew.Visibility = Visibility.Hidden;
ucCustomerResults.Visibility = Visibility.Hidden;
}));
}
else
{
ucCustomerNew.Visibility = Visibility.Hidden;
ucCustomerResults.Visibility = Visibility.Hidden;
}
}
是否需要“调用”(因为在不同的线程)这段代码基本上是说检查,如果是使用适当的方法来隐藏2个用户控件我创造了。
我在我的应用程序中有很多这样的代码段。
我可以重构上面:
private void ReSetScreen()
{
if (!Dispatcher.CheckAccess())
{
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
DoMystuff()
}));
}
else
{
DoMystuff()
}
}
void DoMystuff()
{
ucCustomerNew.Visibility = Visibility.Hidden;
ucCustomerResults.Visibility = Visibility.Hidden;
}
,然后,如果我这样做了,我到处都需要我会基本上创建“影子”的功能。
有没有更好的设计模式,我可以使用呢?
ADDITIONAL: 与延伸(其产生了错误的代码示例:
没有给定的参数对应于所要求的形式参数“方法”“InvokeOnMainThread(控制,动作)”
public partial class MainWindow : Window
{
private void ReSetScreen()
{
WorkingClasses.Shared.InvokeOnMainThread(() => { ucCustomerNew.Visibility = Visibility.Hidden; ucCustomerResults.Visibility = Visibility.Hidden; });
}
public static class Shared
{
public static void InvokeOnMainThread(this Control control, Action method)
{
//if (method == null) throw new ArgumentNullException("method");
if (!control.Dispatcher.CheckAccess())
{
Application.Current.Dispatcher.BeginInvoke(method);
return;
}
method();
}
}
您可以创建一个以'Action'作为参数的单个帮助器方法。就模式而言,这将被称为“高阶函数”。 –
@PieterWitvoet re:作为参数的行动 - 我想我知道你的意思。你会有一个代码示例来发布我接受吗? –