gpt4 book ai didi

c# - 线程和获取附加电话的 COM 端口

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:17 24 4
gpt4 key购买 nike

我有以下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class ThreadWork
{
public static void DoWork()
{

}
}

private void Form1_Load(object sender, EventArgs e)
{

ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
Thread myThread = new Thread(myThreadDelegate);
myThread.Start();
// Begin communications
serialPort1.Open();

serialPort1.Write("AT+CMGF=1\r\n");
//Thread.Sleep(500);
serialPort1.Write("AT+CNMI=2,2\r\n");
//Thread.Sleep(500);
serialPort1.Write("AT+CSCA=\"+4790002100\"\r\n");
//Thread.Sleep(500);
}




private void serialPort1_DataReceived_1(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string response = serialPort1.ReadLine();
this.BeginInvoke(new MethodInvoker(() => textBox1.AppendText(response + "\r\n")));
}
}
}

我想做的是将 AT 命令发送到通过 USB 连接到计算机的手机

  1. 我怎么知道如何配置串口的属性? (比如哪个 COM 是电话 [它通过 USB 连接],波特率和数据位呢?)

  2. 当我运行该程序时,什么也没有发生,我想将 AT 命令发送到我的手机,文本框在那里接收来 self 手机的响应

  3. 这是我第一次使用线程。我是否正确使用它们?在当前示例中它的目的是什么?只是在发送响应之间有延迟吗?

我做错了什么?

最佳答案

您的代码中缺少 serialPort1.DataReceived += serialPort1_DataReceived_1。在单独的线程上打开 COM 端口是完全可以的。至于波特率、停止位等,我会使用安全默认值。 9600 波特,无奇偶校验,一个停止位,8 个数据位。这应该适用于大多数调制解调器。您可能还想先发送“ATZ”以在发送其他命令之前重置调制解调器。

至于知道要使用哪个 COM 端口,请参阅我对您的其他 SO 问题的回答。要么迭代 COM 端口并全部尝试,要么使用 WMI 查询。

我修改了代码并将串口代码移到了线程委托(delegate)中。并且还 Hook 了数据接收事件。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class ThreadWork
{
public static void DoWork()
{
serialPort1.Open();
serialPort1.Write("AT+CMGF=1\r\n");
//Thread.Sleep(500);
serialPort1.Write("AT+CNMI=2,2\r\n");
//Thread.Sleep(500);
serialPort1.Write("AT+CSCA=\"+4790002100\"\r\n");
//Thread.Sleep(500);
serialPort1.DataReceived += serialPort1_DataReceived_1;
}
}

private void Form1_Load(object sender, EventArgs e)
{
ThreadStart myThreadDelegate = new ThreadStart(ThreadWork.DoWork);
Thread myThread = new Thread(myThreadDelegate);
myThread.Start();
}

private void serialPort1_DataReceived_1(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string response = serialPort1.ReadLine();
this.BeginInvoke(new MethodInvoker(() => textBox1.AppendText(response + "\r\n")));
}
}
}

另请查看有关使用 SerialPort DataReceived 的 MSDN 文档事件。

关于c# - 线程和获取附加电话的 COM 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3033240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com