小编Lor*_*enz的帖子

正确释放串行端口

我正在用c#编写一个应用程序,利用SerialPort该类与一些设备进行通信.现在我遇到的最大问题是如何在那里正确释放资源,因为在尝试使用已经使用的串口时会立即出现异常.

由于通常GC应该处理大部分工作,我有点想法还有什么可以尝试...

主要是我尝试了两件事(按照我的逻辑)应该做的工作.我使用基于会话的通信,所以我在每次通信之前和之后调用一个OpenPort和一个ClosePort方法 - 所以应该关闭端口.此外,我已经尝试将包含端口的对象设置为null - 但我仍然得到UnauthorizedAccessExceptions所有时间 - 尽管我百分之百确定该SerialPort.Close()方法已被调用.

你们有没有更好的方法来释放端口,所以我不再得到那个例外?

编辑:谢谢你的答案,但Dispose()的东西不起作用 - 我之前尝试过 - 也许我做错了虽然所以这是一个例子我的代码是什么样的:

它实际上非常像Øyvind所建议的,虽然我刚刚添加了IDisposable- 但是也没有用:

所以这将是我的包装类:

class clsRS232 : IDisposable
{
  public void clsRS232()
  {
    Serialport port = new Serialport("COM1",9600,Parity.none,8,Stopbits.one);
  }
  public void openPort()
  {
     port.Open();
  }
  public void sendfunc(string str)
  {
    port.Write(str);
  }
  public string readfunc()
  {
    port.ReadTo("\n");
  }

  public void Dispose()
  {
     port.Dispose();
  }

}
Run Code Online (Sandbox Code Playgroud)

现在每当我需要rs232通信时,我都会调用这样一个新实例:

   clsRS232 test = new clsRS232;
   test.openport();
   test.sendfunc("test");
   test.Dispose(); …
Run Code Online (Sandbox Code Playgroud)

.net c# serial-port

7
推荐指数
1
解决办法
1万
查看次数

TableLayoutPanel 中的新图片框?

嘿!我的问题的根源是带有 tablelayoutpanel 的表单 - 据我所知,每个单元格只允许一个元素。现在,一个单元格包含一个调整大小的文本框。在此文本框的顶部,我必须放置一些图片框(只是文本中的一些图片 - 并且不可能将它们作为真实图片放置在 Richtextbox 中)。现在,虽然 tablelayoutpanel 的概念只允许每个单元格一个元素,但我在想也许在绘制表单后,可以在上面放置另一个元素 - 只需从代码创建一个 picbox 即可:

 PictureBox pb = new PictureBox();
 pb.Size = new System.Drawing.Size(49,49);
 pb.Location = new Point(20,20);
 this.controls.Add(pb);
Run Code Online (Sandbox Code Playgroud)

现在这不起作用......有什么想法如何绕过这个问题吗?谢谢你的帮助!!!!!

问候,

洛伦兹

c#

0
推荐指数
1
解决办法
2654
查看次数

标签 统计

c# ×2

.net ×1

serial-port ×1