Диспетчер. Вызов внутри делегата. - PullRequest
0 голосов
/ 10 октября 2018

У меня есть кое-что, что я должен сделать в потоке пользовательского интерфейса.Поэтому я делаю это:

        Dispatcher.Invoke(() =>{ what I must do in the UI thread}

Когда я помещаю эту строку внутри функции, она работает, но не работает внутри делегата, как в этом примере:

public Action f = () => // it does'nt work
{
    Dispatcher.Invoke(() => {what I must do in the UI thread });
 }

public void ff() // it works
{
     Dispatcher.Invoke(() => { what I must do in the UI thread });
}

Ошибкаимеет следующий вид:

инициализатор поля не может ссылаться на нестатическое поле, метод или свойство DispatcherObjet.Dispatcher

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Нельзя ссылаться на this.Dispatcher в инициализаторе.

Следующее должно работать или, по крайней мере, переместить ошибку в , что я должен сделать в потоке пользовательского интерфейса

public Action f = () => // it should work
{
    Application.Current.Dispatcher.Invoke(() => {what I must do in the UI thread });
}
0 голосов
/ 10 октября 2018

Вам нужно инициализировать поле f в конструкторе:

public class YourClassName
{    
    public Action f;

    public YourClassName()
    {
        f = () => 
        {
            Dispatcher.Invoke(() => {what I must do in the UI thread });
        }
    }
}

То, что происходит, это то, что f является полем вашего класса.Инициализаторы полей, такие как тот, который вы использовали, не имеют доступа к членам экземпляра класса, а только к статическим членам.
Если вам нужен доступ к членам экземпляра, вам нужно инициализировать поле в элементе экземпляра, например в конструкторе.

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