Member 13488719 Ответов: 1

Я могу получать данные через последовательный порт, но я хочу видеть их в richtextbox.


Я хочу видеть полученные данные в richTextbox,но я получаю исключение, что перекрестный поток не разрешен.Пожалуйста, кто-нибудь может дать мне этот маленький код.Я новичок в нарезании резьбы.

Что я уже пробовал:

Я получаю исключение перекрестной резьбы.

Member 13325846

Привет,
Не могли бы вы помочь мне отправить мои данные, которые записываются каждые 63 секунды в текстовый файл
на другой компьютер с помощью com-порта.
я буду очень благодарен.

1 Ответов

Рейтинг:
1

Redgum

Привет,

Это старый и часто задаваемый вопрос. Вы видите, что ваши данные из последовательного порта принимаются в другом потоке. Поток, который запускает пользовательский интерфейс Windows, отличается. Это как две разные машины, работающие в одном доме, но одна понятия не имеет, как обращаться с другой.

Поэтому вам нужен так называемый делегат.

Смотрите код ниже.


// I've named this 'StringDelegate' - returns void and carries a string.
delegate void StringDelegate(string text); 


// Look at your rich text box, use the rich text box control's 
// name property in place where I have written 'richTextBox1'


//
// Call this method directly with the 
// data from your Serial port.
//
private void SetText(string text)  
{  
    // InvokeRequired required compares the thread ID of the  
    // calling thread to the thread ID of the creating thread.  
    // If these threads are different, it returns true.  
    if (this.richTextBox1.InvokeRequired)  
    {     

        StringArgReturningVoidDelegate d = new StringArgReturningVoidDelegate(SetText);  
        this.Invoke(d, new object[] { text });  
    }  
    else  
    {  
        this.richTextBox1.Text = text;  
    }  
}