.NET SerialPort DataReceived 活动不起作用
我有一个测试应用程序 WPF 评估活动通信 serial port /与调查相比 serial port/. 问题是事件 DataReceived, 似乎这根本不起作用。
我有一个非常简单的形式 WPF 从 TextBox 要输入用户, TextBlock 用于输出和按钮写入输入 serial port.
这是代码:
所以,这里是复杂的因素:
我工作的笔记本电脑没有串行端口,所以我使用一部分调用的软件 Virtual Serial Port Emulator 用于设置 COM2. VSPE 过去完全工作,并不清楚为什么它只与课程一起工作 SerialPort .NET, 但我提到它以防万一。
当我在表单上按一个按钮发送数据时,我的超声窗口 /连接到 COM2/ 表示数据转。 是的,我关掉程序 hyperterminal, 当我想检查我的表单的能力来读取端口。
在连接事件之前,我试图打开端口。 没有变化。
我在这里阅读了另一个帖子,其他人有类似的问题。 这些信息都没有帮助我。
EDIT
:
这是控制台版本 /改变了。
http://mark.michaelis.net/Blog ... .aspx
/:
它应该消除任何问题,这是一个问题流 /我认为/. 这也不起作用。 再次, Hyperterminal 报告通过端口发送的数据,但控制台应用程序似乎无法启动事件 DataReceived.
EDIT #2:
我意识到我有两个应同时发送和接收的两个单独的应用程序 serial port, 因此,我决定尝试同时运行它们......
如果我键入控制台应用程序,则会触发事件 WPF app DataReceived 预期的流误差错误 /我知道如何应对/.
如果我在应用程序中键入 WPF, 它由Dataredived Console应用程序事件触发,它重复数据。
我假设问题在于我使用软件的某个地方 VSPE, 配置为处理一个 serial port 入口和退出。 而且因为课堂上的一些奇怪 SerialPort 一份副本 a serial port 不能同时发件人和收件人。 无论如何,我认为它是决定的。
我有一个非常简单的形式 WPF 从 TextBox 要输入用户, TextBlock 用于输出和按钮写入输入 serial port.
这是代码:
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/;
}
}
所以,这里是复杂的因素:
我工作的笔记本电脑没有串行端口,所以我使用一部分调用的软件 Virtual Serial Port Emulator 用于设置 COM2. VSPE 过去完全工作,并不清楚为什么它只与课程一起工作 SerialPort .NET, 但我提到它以防万一。
当我在表单上按一个按钮发送数据时,我的超声窗口 /连接到 COM2/ 表示数据转。 是的,我关掉程序 hyperterminal, 当我想检查我的表单的能力来读取端口。
在连接事件之前,我试图打开端口。 没有变化。
我在这里阅读了另一个帖子,其他人有类似的问题。 这些信息都没有帮助我。
EDIT
:
这是控制台版本 /改变了。
http://mark.michaelis.net/Blog ... .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/;
}
}
它应该消除任何问题,这是一个问题流 /我认为/. 这也不起作用。 再次, Hyperterminal 报告通过端口发送的数据,但控制台应用程序似乎无法启动事件 DataReceived.
EDIT #2:
我意识到我有两个应同时发送和接收的两个单独的应用程序 serial port, 因此,我决定尝试同时运行它们......
如果我键入控制台应用程序,则会触发事件 WPF app DataReceived 预期的流误差错误 /我知道如何应对/.
如果我在应用程序中键入 WPF, 它由Dataredived Console应用程序事件触发,它重复数据。
我假设问题在于我使用软件的某个地方 VSPE, 配置为处理一个 serial port 入口和退出。 而且因为课堂上的一些奇怪 SerialPort 一份副本 a serial port 不能同时发件人和收件人。 无论如何,我认为它是决定的。
没有找到相关结果
已邀请:
9 个回复
小姐请别说爱
赞同来自:
它为我解决了问题,旗帜 DataTransmitReady 它没有打开,所以没有获得数据。
三叔
赞同来自:
快网
赞同来自:
这就是为什么我的初始声明看起来像这样:
我分开了方法 open port 和 close port, 经常检查端口是否已关闭 com.
最后,确保您的虚拟端口驱动程序 Com 正确安装并使用正确的端口,即插即用,为我的适配器播放是不够的。 如果要创建一种控件,这将允许您在执行期间选择可用的端口,则以下命令将为您提供可用的端口:
帅驴
赞同来自:
窦买办
赞同来自:
我想这是模型的问题 STA, 由于转型到其在控制台应用中的夹杂物中足够固定。
快网
赞同来自:
slowback,它可能是流媒体的问题,特别是如果您正在运行 .NET 4.0 或更晚。
在 .NET 4.0 事件处理程序在流中开始 ThreadPool, 在某些情况下,在发生这种情况之前可能会发生重大延迟。 /在我的代码中,完全努力 .NET 2.0, 在我们更新到的情况下,注意到问题 .NET 4.5. 事件处理程序经常在预期之后工作得多,有时完全没有工作!/
称呼
http://msdn.microsoft.com/en-u ... .aspx
对于完成线程的重大值,它强迫问题如此快速消失。 在我们申请的背景下
这就足够了。 在观察到问题的机器上,默认值 /在呼叫中获得
http://msdn.microsoft.com/en-u ... .aspx
/ 是平等的 2.
龙天
赞同来自:
帅驴
赞同来自:
我的决定是
删除
防病毒 McAfee 和所有与之相关的。 当我看到杂志 McAfee, 他们有关于停止流的记录,我建议
在溪流中工作。
我希望这个决定将为您工作。 真挚地。
知食
赞同来自:
结果:
获得的数据:
大家好
按任意键继续 ...