0

Подскажите пожалуйста, разрабатываю приложение WPF под FrameWork 4.0, т.к. необходима совместимость с win XP. При определённом условии, мне необходимо вызвать модальное окно, но при всём богатстве описания данной процедуры - я терплю неудачу... получаю исключение: Exception thrown: 'System.InvalidOperationException' in PresentationCore.dll на вот этой строке : Window_Dialog winDialog = new Window_Dialog();

Ошибка вроде бы не новая, решения её есть, вызов во втором потоке, но скорее всего сказывается скудный опыт, ибо решить не получается.

void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        timer.Stop();
        Order result = orders.Find(x => x.Id == TempOrder.Id);

        if(result.CustomerName == "")
        {
            Window_Dialog winDialog = new Window_Dialog();

            if (winDialog.ShowDialog() == true)
            {
                MessageBox.Show("Записано!");
            }
            else
            {
                MessageBox.Show("Отмена");
            }

        }
}

Буду рад Вашему совету! Спасибо!

Andrey
  • 117
  • Полный текст ошибки приложите – Андрей NOP Jan 08 '19 at 14:54
  • 1
  • Полный текст ошибки :Exception thrown: 'System.InvalidOperationException' in PresentationCore.dll Окно просто не открывается. В Output только эта строка – Andrey Jan 08 '19 at 15:32
  • @MSDN, а разве нельзя создать окно в другом потоке? Вроде можно. – Андрей NOP Jan 08 '19 at 18:03
  • 1
    @Andrey, попробуйте вместо этого таймера использовать DispatcherTimer. Ну и я просил весь стектрейс показать – Андрей NOP Jan 08 '19 at 18:04
  • @АндрейNOP Можно. Но, во-первых, поток, на котором выполняется таймер, вряд ли запущен с атрибутом STAThread, а во-вторых, даже если создать окно в фоновом потоке получится, любое взаимодействие этого окна с другими окнами должно будет осуществляться через Dispatcher.Invoke/BeginInvoke. С высокой вероятностью, это не то, чего хочет автор. – MSDN.WhiteKnight Jan 08 '19 at 18:18
  • @Андрей NOP, я попробовал переделал таймер на DispatcherTimer, и всё заработало! Спасибо Вам! Буду рад отметить решением! По поводу логов, в 500 символов не уместился бы, но было как-то так: 'App.exe' (CLR v4.0.30319: app.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\PresentationCore.resources\v4.0_4.0.0.0_ru_31bf3856ad364e35\PresentationCore.resources.dll'. Module was built without symbols. А потом строка, которую я Вам написал выше. – Andrey Jan 09 '19 at 07:34
  • @MSDN.WhiteKnight Я посмотрел материал, по ссылке, что Вы написали, и он мне то же пригодиться, т.к. из диалогового окна необходимо будет возвращать выбранные пользователем значения, а там как раз на старые фреймворки! С ними, как я понял, одни нюансы... Спасибо! По поводу атрибута STAThread, я видел советы, но видать неумело применял, т.к. результат был 0. Спасибо Вам за советы! – Andrey Jan 09 '19 at 07:42

0 Answers0