이벤트 기반 직렬 포트 통신 (직렬 포트 폴링과 비교)을 평가할 수있는 WPF 테스트 응용 프로그램이 있습니다. 문제는 DataReceived 이벤트가 전혀 실행되지 않는 것입니다..NET SerialPort DataReceived 이벤트가 실행되지 않음
저는 사용자 입력 용 TextBox, 출력 용 TextBlock 및 직렬 포트에 입력을 작성하는 버튼이있는 매우 기본적인 WPF 형식을 사용합니다. 여기
코드입니다 : 이제public partial class Window1 : Window
{
SerialPort port;
public Window1()
{
InitializeComponent();
port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
port.DataReceived +=
new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
}
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Debug.Print("receiving!");
string data = port.ReadExisting();
Debug.Print(data);
outputText.Text = data;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Debug.Print("sending: " + inputText.Text);
port.WriteLine(inputText.Text);
}
}
, 여기에 복잡한 요인 :
내가에는 시리얼 포트가없는 일하고 노트북은, 그래서 나는 조각을 사용하고 있습니다 가상 직렬 포트 에뮬레이터라는 소프트웨어는 COM2를 설정합니다. VSPE는 과거에 훌륭하게 작동 해 왔으며 .NET의 SerialPort 클래스에서만 오작동하는 이유는 분명하지 않지만 다만이를 언급합니다.
내 양식의 단추를 눌러 데이터를 보내면 내 하이퍼 터미널 창 (COM2에 연결됨)에서 데이터가 통과하고 있음을 알 수 있습니다. 예, 포트를 읽을 수있는 양식의 기능을 테스트 할 때 하이퍼 터미널을 연결 해제합니다.
이벤트를 연결하기 전에 포트를 열어 보았습니다. 변경 없음.
다른 게시물에서 비슷한 문제가있는 다른 게시물을 읽었습니다. 이 정보의 아무도는이 경우에 나를 도왔다.
편집 :
여기 (http://mark.michaelis.net/Blog/TheBasicsOfSystemIOPortsSerialPort.aspx에서 수정) 콘솔 버전입니다 : 이것은 스레딩 문제 (나는 생각한다)의 것을 모든 우려를 제거해야
class Program
{
static SerialPort port;
static void Main(string[] args)
{
port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
port.DataReceived +=
new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
string text;
do
{
text = Console.ReadLine();
port.Write(text + "\r\n");
}
while (text.ToLower() != "q");
}
public static void port_DataReceived(object sender,
SerialDataReceivedEventArgs args)
{
string text = port.ReadExisting();
Console.WriteLine("received: " + text);
}
}
. 이것도 작동하지 않습니다. 다시 하이퍼 터미널은 포트를 통해 전송 된 데이터를보고하지만 콘솔 앱은 DataReceived 이벤트를 발생시키지 않습니다.
편집 # 2 :
내가 보내고 직렬 포트에서 수신해야 모두 두 개의 응용 프로그램을 가지고 것을 깨달았다, 그래서 동시에 실행하기로 결정했습니다 ...
나는 경우, 콘솔 응용 프로그램에 입력하면 예상되는 스레딩 오류 (처리 방법을 알고있는)와 함께 WPF 응용 프로그램 DataReceived 이벤트가 발생합니다.
WPF 앱에 입력하면 콘솔 앱의 DataReceived 이벤트가 발생하고 데이터가 에코됩니다.
VSPE 소프트웨어를 사용하고 있는데, 직렬 포트 하나를 입력과 출력으로 처리하도록 설정되어 있다고 생각합니다. 그리고 SerialPort 클래스의 이상한 점을 통해 직렬 포트의 한 인스턴스는 송신자와 수신자가 될 수 없습니다. 어쨌든, 나는 그것이 해결되었다고 생각한다.
위의 콘솔 버전을 참조하십시오. 불운. – Klay