При использовании одного и того же последовательного порта данные получают событие в двух разных формах - PullRequest
1 голос
/ 20 февраля 2012

У меня проблема с моим SerialDataReceivedEventHandler, который не отвечает на данные в порту serail.

У меня есть одна основная форма, в которой я открываю порт, и другие операции, которые необходимо выполнить для правильной связи через последовательный порт(отправка и получение работы)!Затем я открываю другую форму в том же проекте, который нужен тот же последовательный порт для чтения и записи!Проблема в том, что мой SerialDataReceivedEventHandler в form2 не работает jet, он полностью идентичен первому в mainform.(если я вызываю serial.close () в основной форме, приложение зависает или вызывает огромную задержку)

, вероятно, мне нужно сделать публичным из этого события публичное событие, но я до сих пор не знаю, как сделать свой заказсобытие или что-то еще, что вызовет событие в форме 2, что данные поступают на порт

Я нашел эту ссылку для справки, но не работает с моим приложением.

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/7efccf0e-b412-4869-b942-a006773a833f

Я использую VS2008, framework3.5 (проект для интеллектуальных устройств)

Может кто-нибудь помочь мне с этим?Пожалуйста!

1 Ответ

1 голос
/ 20 февраля 2012

Переместите потребление SerialPort в отдельный статический (или одноэлементный) класс.Создайте событие DataReceived в этом классе и запускайте его каждый раз при получении данных.Обе формы подписываются на событие DataReceived - таким образом обе формы будут получать данные.

Редактировать 1: Пример в псевдокоде

public static class Serial {
    public static delegate void DataReceivedEventHandler(object sender, ReceivedEventArgs e);
    public static event DataReceivedEventHandler DataReceived;
    static SerialPort serialPort = new SerialPort();        

    static Serial() {
        serialPort = new SerialPort();
        serialPort.DataReceived += Incoming;
        serialPort.Open();
    }

    private static void Incoming(object sender, SerialDataReceivedEventHandler args) {
        if (DataReceived != null) {
           ReceivedEventArgs rea = new ReceivedEventArgs {Data = args.Data};
           DataReceived(this, rea);
        }
    }
}

public class ReceivedEventArgs : EventArgs {
   public string Data { get; set;}
}

public class Form1: Form {
    public Form1() {
       Serial.DataReceived += Incoming;
    }

    private void Incoming(object sender, ReceivedEventArgs e) {
        // you receive the data here
        Debug.WriteLine(e.Data);
    }
}

public class Form2: Form {
    public Form2() {
       Serial.DataReceived += Incoming;
    }

    private void Incoming(object sender, ReceivedEventArgs e) {
        // you receive the data here
        Debug.WriteLine(e.Data);
    }
}

Опять же, это псевдокод, без компилятора поблизости,Надеюсь, это поможет.

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