Я работал только с WinForms и решил перейти на WPF, но столкнулся с проблемой, которую не могу решить:
Я хочу авторизоваться на vk.com через vkApi, а для этого мне нужно передать делегат, возвращающий string с кодом для 2factor auth
p.TwoFactorAuthorization = () =>
{
var two = new TwoFactor();
two.ShowDialog();
return two.Data;
};
Я решил^ сделать диалоговое окно, но получил "Вызывающий поток должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого"
vk.Authorize(p);
Итак, это означает, что метод this^ создает новый поток внутри, и мне нужно показать мой диалог из потока пользовательского интерфейса, я прав?
Я обнаружил, что Dispatcher.Invoke может мне помочь (не BeginInvoke, потому что мне нужно вернуть string), и написал это
return Dispatcher.Invoke(() =>
{
var two = new TwoFactor();
two.ShowDialog();
return two.Data;
}));
Но теперь мое приложение просто зависает, и диалоги не появляются! Что я делаю не так?
Invoke()
равенvoid
, что означает, что вы не можете ничего вернуть просто с помощьюreturn myVar
. Вы должны передавать данные непосредственно в модель, которая в них нуждается. - person k1ll3r8e   schedule 28.10.2019MessageBox
? СMessageBox
я не могу воспроизвести вашу проблему. Отправьте больше кода, чтобы увидеть, где вы вызываете/используете свои фрагменты кода. Также, пожалуйста, найдите минутку и прочитайте MCVE. - person Rekshino   schedule 28.10.2019