У меня есть приложение 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;
}
}
Этот код в основном говорят чек, если «Invoke» требуется (потому что в другом потоке), и если так использовать подходящий способ, чтобы скрыть 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;
}
, а затем, если я сделал это для везде, где я должен был бы я должен был бы в принципе создать функции «тень».
Есть ли лучший дизайн, который я мог бы использовать вообще?
ДОПОЛНИТЕЛЬНО: Пример кода с расширением (который дает ошибку:
Там не аргумент, учитывая, что соответствует «метод» требуется формальный параметр «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: действие как аргумент - я думаю, я знаю, что вы имеете в виду. У вас есть пример кода для отправки, чтобы я принял его? –