Как определить текущий DispatcherPriority из метода который выполняет Dispatcher? Если я запускаю какой–то метод через Dispatcher с приоритетом (для примера) Input, то как узнать из самого метода, с каким приоритетом он выполняется?
В принципе можно, хотя я не вполне понимаю, зачем это вам.
Вот такой класс у меня работает:
class DispatcherSpy : IDisposable
{
public DispatcherSpy(Dispatcher dispatcher)
{
this.dispatcher = dispatcher;
dispatcher.Hooks.OperationCompleted += OnOperationCompletion;
dispatcher.Hooks.OperationStarted += OnOperationStart;
}
public DispatcherPriority? CurrentOperationPriority { get; private set; }
void OnOperationStart(object sender, DispatcherHookEventArgs e) =>
CurrentOperationPriority = e.Operation.Priority;
void OnOperationCompletion(object sender, DispatcherHookEventArgs e) =>
CurrentOperationPriority = null;
public void Dispose()
{
dispatcher.Hooks.OperationStarted -= OnOperationStart;
dispatcher.Hooks.OperationCompleted -= OnOperationCompletion;
}
readonly Dispatcher dispatcher;
}
Пользоваться так:
public partial class MainWindow : Window
{
DispatcherSpy spy;
public MainWindow()
{
InitializeComponent();
Loaded += (o, args) =>
{
spy = new DispatcherSpy(this.Dispatcher);
this.Dispatcher.InvokeAsync(Callback, DispatcherPriority.Input);
};
Unloaded += (o, args) => spy.Dispose();
}
void Callback()
{
var priority = spy.CurrentOperationPriority;
Console.WriteLine(priority);
}
}
DispatcherSpy должен быть запущен до старта метода, который будет запрашивать своё состояние.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости