串口通讯显示

2024-02-24

我正在尝试通过串行端口通信进行聊天。这个聊天必须在 WPF 项目中有一个界面,我已经制作了界面和所有内容。我陷入了通过串口接收响应的困境。我已经尝试从串行端口添加 DataReceived 事件,但我担心我使用错误,因为我以前从未用 C# 编程过。这是一个非常简单的代码。 我需要做的是从串行端口接收信息并将其显示在文本块中,就像在简单的聊天窗口中一样。

        InitializeComponent();
        _serialPort = new SerialPort();

        foreach (string s in SerialPort.GetPortNames())
        {
            listaComs.Items.Add(s);
        }


    }

    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        visor.Inlines.Add("Data Received:");
        visor.Inlines.Add(indata);
    }
    private void enviarClick(object sender, RoutedEventArgs e)
    {
        _serialPort.WriteLine(escribir.Text);
        visor.Inlines.Add("Yo: " + escribir.Text + Environment.NewLine);
    }

    private void cambiarTexto(object sender, MouseButtonEventArgs e)
    {
        if (escribir.Text == "Escriba su texto")
        {
            escribir.Text = "";
        }
    }

    private void inicializarSerial()
    {
        // Poner las propiedades correctas.
        _serialPort.BaudRate = 9600;
        _serialPort.Parity = Parity.None;
        _serialPort.StopBits = StopBits.One;
        _serialPort.DataBits = 8;
        _serialPort.Handshake = Handshake.None;
        _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

        // Poner los timeouts de escritura y lectura
        _serialPort.ReadTimeout = 500;
        _serialPort.WriteTimeout = 500;
    }

    private void conectarCom(object sender, RoutedEventArgs e)
    {
        string seleccion = listaComs.SelectedItem.ToString();
        _serialPort.PortName = seleccion;
        inicializarSerial();
        _serialPort.Open();
        _continue = true;
        visor.Text = "";
    }

    private void desconectarCom(object sender, RoutedEventArgs e)
    {
        _serialPort.Close();
    }

当我在 .exe 文件中运行它时,它崩溃并显示InvalidOperationException有内部异常(翻译):

“实现该调用的子进程无法获得对此的访问权限 对象,因为专有是另一个子流程。”


事件是从调用它们的线程中触发的,在串行端口(或任何通信层)的情况下,这将确实不在 UI 线程上。

但是,UI 操作must在 UI 线程上完成。所以下面的代码将会失败:

    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();
    visor.Inlines.Add("Data Received:");
    visor.Inlines.Add(indata);

因为您正在从错误的线程修改 UI 元素。解决方案是使用BeginInvoke (MSDN http://msdn.microsoft.com/en-us/library/cc190824(v=vs.110).aspx) 将操作编组到 UI 线程上:

    SerialPort sp = (SerialPort)sender;
    string indata = sp.ReadExisting();

    Dispatcher.BeginInvoke(() =>
    {
       visor.Inlines.Add("Data Received:");
       visor.Inlines.Add(indata);
    }, null);

附言。你的例外的翻译似乎不正确;如果这是问题所在,您将看到的例外是(英文):

跨线程操作无效:从其他线程访问控制 比创建它的线程更重要。

(或者非常相似的东西)。我无法识别提供的文本,并且鉴于您的代码,看起来这就是您遇到的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口通讯显示 的相关文章

  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • .crt 部分?这个警告是什么意思?

    我最近收到此警告 VC 2010 warning LNK4210 CRT section exists there may be unhandled static initializers or terminators 我假设这是关键部分
  • 自动映射器多对多 stackoverflowException

    我遇到以下映射的堆栈溢出 Mapper CreateMap
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 使用MVVM时如何将事件参数作为interaction.Trigger中的参数传递?

    基本上我的自定义类中有一个事件 我将使用事件的参数 gt 属性作为该方法的参数来调用自定义类中的特定方法 您可以观察此信息背后的实际代码 instance FileOpening sender e gt CustomClass Method
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • 从 DataRow 单元格解析 int [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何从 DataRow 单元格解析 int 值 Int32 Parse item QuestionId ToString 这段代码可以工作 但看
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • 如何检测应用程序正在运行的 .NET 版本?

    我尝试使用Environment Version ToString 确定目标计算机上正在使用什么 NET 框架 但安装了 4 0 版本时 它说我正在使用 NET 2 0 如何检测目标计算机上正在运行的 NET Framework 版本 En
  • 如何将System.Windows dll添加到Visual Studio 2010 Express?

    我正在开发一个小型应用程序C and VS2010 as IDE with NET框架4 我想用CaptureSource类以便从笔记本电脑的网络摄像头捕获视频 为此我需要添加一个命名空间System Windows DependencyO
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死

随机推荐

  • Gradle 和 Android:具有多个 Maven 工件发布的 pom 配置

    使用 Gradle v 1 7 作为构建工具开发 Android 库时 我使用了 Maven 插件并配置了任务 uploadArchives 将库的发布版本和调试版本发布到本地 Maven 存储库 下面的代码工作正常 apply plugi
  • 如何将语音焦点转移到我的模式?

    我使用的是 iPhone 6 并且打开了语音 辅助功能 选项 我在链接单击时打开了退出模式 并将键盘焦点设置在模式上 使用 js 这一切都很好 但是 焦点旁白并未切换到我的模式 它仍然位于触发链接上 如何将语音焦点转移到模式上 这是模态代码
  • 如何在 Appengine 上使用 xlrd 读取 excel 文件

    我在 appengine 中使用 xlrd 我用烧瓶 我无法读取输入文件 并且它不断显示相同的错误消息 代码是 def read rows inputfile rows wb xlrd open workbook inputfile sh
  • Apache 将规则重写为lighttpd

    如何将此apache重写规则转换为lighttpd重写规则 Turn on URL rewriting RewriteEngine On Installation directory RewriteBase adpanel Protect
  • git:错误:您需要首先解析当前索引[重复]

    这个问题在这里已经有答案了 我试图将一个分支与我的分支合并 但出现了合并冲突 看到冲突后 我决定恢复我的分支 但我不确定如何执行此操作 因为我通常运行以下命令的方法似乎无法重置我的分支 git fetch origin git reset
  • $_SERVER['HTTP_HOST'] = 不是我的服务器的 IP

    我的php脚本有 SERVER HTTP HOST 等于一个与我的服务器ip无关的ip 有人有简单的解释吗 我认为某些机器人正在发送完全错误的主机标头 但我认为它无法连接到具有错误主机标头的服务器 thx HTTP HOST由客户提供 在H
  • 如何修复奇怪的 NSLayoutConstraint 错误,这些错误似乎不会影响自定义 UITableViewCell 中的布局

    每次我的自定义 UITableViewCells 由 tableView cellForRowAtIndexPath 绘制时 控制台都会吐出一堆 NSLayoutConstraint 不一致的信息 我理解其中大部分 Unable to si
  • MS Access 2010 导入规范位置?

    我有一个 MS Access 数据库 其中外部数据内的已保存导入具有导入作业 这些作业实际上将某些数据从不同位置导入到某些表中 我无法找出其中存在的每个作业实际导入了哪些表 因为为这些导入指定的名称不清楚且不相关 有什么方法可以找出导入实际
  • 在 alpine linux 上执行 mongodb 二进制文件

    我正在尝试在 Alpine 64 位 Linux 中为 docker 容器运行二进制 mongodb 但运行命令时 mongodb出现以下错误 bash 4 3 mongod bash mongod No such file or dire
  • 我应该使用 Jenkins 重量级执行器还是蝇量级执行器来发送通知?

    我的 Jenkins 管道中有几个步骤可以通知用户 在我的例子中使用 Slack 集成 在 a 中编写通知代码是一个好习惯吗node阻止使用重量级执行器还是将其留在外面以使用蝇量级执行器 根据文档 https github com jenk
  • Postgres:当出现错误时如何执行 Sum 查询?

    我正在使用 sum 函数来查找总数 但出现错误 这是查询 select sum col1 from table name where col2 abc Error function sum text does not exist Hint
  • 如何将 NSMutableArray 传递给另一个 ViewController 类

    我已经创建了 NSMutale 数组 英雄列表视图控制器 我想在另一个 viewController 中使用它地图教程视图控制器 我这样尝试过 在 HeroListViewController h 中 MapTutorialViewCont
  • 如何加快gradle中tomcat的启动过程?

    尝试使用此 gradle 代码片段启动 tomcat task startTomcat type Exec workingDir tomcat home bin commandLine cmd c startup bat 运行此任务后 to
  • Connect-mongo 会话不会自动删除

    我有一个使用 NodeJS Express MongoDB 和 connect mongo 的应用程序 我的问题是 会话过期时似乎不会自动从 MongoDB 中删除 因此数据库大小会不断增长 直到磁盘已满 connect mongo 的开发
  • 免注册 COM 互操作和相关程序集

    我们正在致力于将基于 MFC 的大型应用程序与少数托管 NET 加载项集成 与这些加载项的通信是通过 COM 完成的 从历史上看 我们只是使用注册表来使这些加载项 作为 COM 服务器 可供应用程序使用 但是 现在我们尝试使用免注册 COM
  • 如何在Python中使用wand优化图像大小

    我想使用魔杖调整和优化 png 和 jpg 图像大小 使用 PIL 如果我指定优化选项 我可以保存大约三分之一大小的相同图像 with open filename rb as f pimage PImage open f resized p
  • 表单认证滑动过期不起作用

    我有下面的代码 int intTimeout FormsAuthentication Timeout Hours 60 FormsAuthentication Timeout Minutes var authTicket new Forms
  • Terraform 错误:锁定状态时出错:获取状态锁时出错:发生 2 个错误:

    我尝试了 terraform 版本 v0 12 26 和 v0 13 3 两者都失败了 地形计划 获取状态锁 这可能需要一些时间 错误 锁定状态时出错 获取状态锁时出错 发生 2 个错误 ResourceNotFoundException
  • 初始化期间无法成功更新网络信息

    当我当天第一次启动该应用程序时 我总是遇到上述问题 当我第一次启动应用程序时 我会调用服务器来获取一些数据 然后播放动画视频 服务器调用位于与主 UI 线程不同的线程中 这与网络可达性或动画视频有关吗 我认为第一部分是主要问题 但不能一直重
  • 串口通讯显示

    我正在尝试通过串行端口通信进行聊天 这个聊天必须在 WPF 项目中有一个界面 我已经制作了界面和所有内容 我陷入了通过串口接收响应的困境 我已经尝试从串行端口添加 DataReceived 事件 但我担心我使用错误 因为我以前从未用 C 编