我有一個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:作爲參數的行動 - 我想我知道你的意思。你會有一個代碼示例來發布我接受嗎? –