Область применения метода-обработчика таймера внутри Invoke внутри задачи - PullRequest
0 голосов
/ 30 апреля 2020

Мне интересно, что случится с областями, если у меня внутри конструктора UserControl будет следующий код:

private static DispatcherTimer _exampleTimer = new DispatcherTimer(DispatcherPriority.Background);
private static DispatcherTimer _exampleTimer2 = new DispatcherTimer(DispatcherPriority.Background);
public UserControlSomeName()
{
    try
        {
            InitializeComponent();

            // Task1
            Task.Factory.StartNew(() =>
            {
                // more code
                Dispatcher.Invoke(() =>
                {
                    // more code
                    // Task2
                    Task.Factory.StartNew(() => { SomeMethod(); });
                    // more code
                    _exampleTimer.Tick += (s, e) =>  { SomeMethod(); };
                }
            }
        }
   // more code
   _exampleTimer2.Tick += (s, e) =>  { SomeMethod(); };
   }
  • Конструктор UserControl работает в визуальном потоке.
  • Task1 находится в другом потоке (не визуально).
  • Когда Dispatcher.Invoke () выполняется, он "запрашивает" визуальный поток выполнить код внутри него.
  • Task2 , хотя находится внутри Invoke , он находится в новой Task , поэтому он запускается в новом потоке вне визуального потока.

Но метод обработчика _exampleTimer будет выполняться внутри визуального потока, поскольку обработчик объявлен внутри Invoke.

Я уже провел некоторый тест на выполнение кода, но я не уверен, прав ли я, может кто-нибудь помочь мне понять, правильно ли это?

Если бы SomeMethod был вместо этого встроенным методом для обрабатывать таймер, поведение будет таким же?

Если тот, кто находится внутри Только UserControl, например _exampleTimer2 , который будет выполняться внутри визуального потока или в другом потоке?

(Пожалуйста, это пример, это не настоящий код).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...