tetiklenmediğini I (yoklama vs seri port) olay tabanlı seri port iletişimi değerlendirmek için bir WPF test uygulaması var. Sorun şu ki DataReceived olayı hiç ateş etmiyor gibi görünüyor. .NET SerialPort DataReceived olay
Ben
kullanıcı girişi için bir TextBox, çıkış için bir TextBlock ve seri port girişi yazmak için bir düğme ile bir çok temel WPF form var. İşte kod: Şimdipublic 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);
}
}
, burada zorlaştıran faktörler şunlardır:
Ben hiçbir seri bağlantı noktası vardır çalışıyorum dizüstü, bu yüzden bir parça arasında kullanıyorum COM2 kurmak için Virtual Serial Port Emulator yazılımı denir. VSPE geçmişte takdire şayan bir şekilde çalıştı ve neden sadece .NET'in SerialPort sınıfında arızalanabileceği net değil, fakat durumun sözünü ettim. Ben veri göndermek için benim formdaki düğme vurduğunda
, (COM2 üzerinde bağlı) benim HyperTerminal pencere verileri elde ettiğini göstermektedir. Evet, formumun bağlantı noktasını okuma yeteneğini test etmek istediğimde Hyperterminal'in bağlantısını kesiyorum.
Ben olayı kablolama önce port açarak denedim. Değişiklik yok.
Başka birinin burada benzer bir sorunu olduğu başka bir gönderi okudum. Bu bilginin hiçbiri bu durumda bana yardımcı olmadı.
DÜZENLEME:
İşte (http://mark.michaelis.net/Blog/TheBasicsOfSystemIOPortsSerialPort.aspx değiştirilmiş) konsol versiyonu: Bu da Threading sorun (Sanırım) olduğunu herhangi bir endişe ortadan kaldırmak gerekir
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);
}
}
. Bu da işe yaramıyor. Yine, Hyperterminal bağlantı noktası aracılığıyla gönderilen verileri raporlar, ancak konsol uygulaması DataReceived olayını tetiklemiyor gibi görünüyor.
DÜZENLEME # 2:
ben göndermek ve seri porttan almalı hem iki ayrı uygulamanın gerektiğini anladı, bu yüzden aynı anda çalıştıran denemeye karar verdi ...
I Eğer Konsol uygulamasına, WPF uygulaması DataReceived olayı, beklenen iş parçacığı hatasıyla (nasıl başa çıkılacağını bildiğim) yazılır.
WPF app, konsol uygulaması DataReceived olay yangınlar içine yazın ve veriyi yankıları edin. Sorunu tahmin ediyorum
giriş ve çıkış hem de bir seri portu tedavisinde kurulur VSPE yazılımı, benim kullanımı yerdedir. Ve SerialPort sınıfının bazı gariplikleri sayesinde, bir seri portun bir örneği hem gönderici hem de alıcı olamaz. Her neyse, sanırım çözüldü.
Yukarıdaki konsol sürümüne bakın. Şanssız. – Klay