none
Перехват события из библиотеки RRS feed

  • Вопрос

  • При записи сообщения в TextBox Выдает ошибку:

    $exception {"Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'logTextBox'
    не из того потока, в котором он был создан."}

    System.Exception {System.InvalidOperationException}


            tmp = new myClass();
            tmp.onError += tmp_onError; 
    
            void tmp_onError(string str)
            {
                logTextBox.Text += "/n" + str;
            }

    В переменную записывается нормально

    MyClass определен в подключенной dll библиотеке

    Как сохранить параметр в компонент?



    • Изменено OlegNetCom 10 мая 2013 г. 4:14

Ответы

  • У вас метод tmp_onError вызывается не в UI-потоке, соответственно изменять пользовательский интерфейс напрямую вы не можете. Для этого следует использовать объект Dispatcher.

    Если вы используете Windows Forms:

            void tmp_onError(string str)
            {
                if (logTextBox.InvokeRequired)
                {
                    logTextBox.Invoke(new Action<String>(tmp_onError), new object[] {str});
                    return;
                }
                logTextBox.Text += "/n" + str;
            }
    

    Если используете WPF:

            private void tmp_onError(string str)
            {
                if (logTextBox.Dispatcher.CheckAccess())
                {
                    logTextBox.Text += "/n" + str;
                    return;
                }
                logTextBox.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
                                             new Action<String>(tmp_onError), new object[] {str});
            }
    • Помечено в качестве ответа OlegNetCom 10 мая 2013 г. 4:12