none
Ожидание потока? RRS feed

  • Вопрос

  • Здравствуйте :) Столкнулся с такой проблемой - есть класс, в котором создаются таймеры. Они должны быть созданы в основном потоке для корректной работы. Я использую следующий код:

    Dim tmpElement As Element
    
    'Тут мы инициализируем таймеры
    Dispatcher.Invoke(Sub() tmpElement = New Element)
    
    'И дальше работаем как обычно
    tmpElement.SetParam(0)...

    Но студия выдает предупреждение, что tmpElement используется прежде, чем ей присвоено значение. Получается надо ожидать выполнения Invoke? Или можно выполнить как-то операцию по-другому?

    15 августа 2017 г. 21:06

Ответы

  • Dispatcher.Invoke блокирует вызывающий поток (в отличие от InvokeAsync), так что в этом плане все в порядке. Чтоб убрать предупреждения достаточно присвоить значение Nothing при объявлении переменной.

    Однако если данный элемент является элементом UI то работать с ним можно только на основном потоке. Таким образом ведь код должен быть перенесен в делегат который выполняется Invoke, a не только создание объекта.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа Siompc 18 августа 2017 г. 9:08
    16 августа 2017 г. 3:14
    Модератор