📄 win32tmout.cs
字号:
namespace SerialPorts
{
using System;
using System.Runtime.InteropServices;
internal class Win32Tmout
{
// Methods
/// <summary>
/// 无参的构造函数
/// </summary>
internal Win32Tmout()
{
this.ct = new COMMTIMEOUTS();
//为COMMTIMEOUTS结构体,创造一个实例
this.ct.readIntervalTimeout = uint.MaxValue;
this.ct.readTotalTimeoutConstant = 0;
this.ct.readTotalTimeoutMultiplier = 0;
this.ct.writeTotalTimeoutMultiplier = 0;
this.ct.writeTotalTimeoutConstant = 0;
}
/// <summary>
/// 带参数的构造函数
/// </summary>
/// <param name="wttc"></param>
/// <param name="wttm"></param>
internal Win32Tmout(uint wttc, uint wttm)
{
this.ct = new COMMTIMEOUTS();
this.ct.readIntervalTimeout = uint.MaxValue;
this.ct.readTotalTimeoutConstant = 0;
this.ct.readTotalTimeoutMultiplier = 0;
if (wttm == 0)
{
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
this.ct.writeTotalTimeoutMultiplier = 0;
}
else
{
this.ct.writeTotalTimeoutMultiplier = 10000;
}
}
else
{
this.ct.writeTotalTimeoutMultiplier = wttm;
}
this.ct.writeTotalTimeoutConstant = wttc;
}
/// <summary>
/// 用于指定获取中断信息
/// </summary>
/// <param name="handle"></param>
/// <returns></returns>
internal bool Get(IntPtr handle)
{
if (!Win32Tmout.GetCommTimeouts(handle, out this.ct))
{
this.SetFault("GetCommTimeouts()");
return false;
}
return true;
}
/// <summary>
/// 调用WindowsAPI函数,调用了kernel32.dll动态链接库,
/// 该库主要为它控制着系统的内存管理、数据的输入输出操作和中断处理而设计
/// </summary>
/// <param name="hFile"></param>
/// <param name="lpCommTimeouts"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
private static extern bool GetCommTimeouts(IntPtr hFile, out COMMTIMEOUTS lpCommTimeouts);
internal bool Set(IntPtr handle)
{
if (!Win32Tmout.SetCommTimeouts(handle, ref this.ct))
{
this.SetFault("SetCommTimeouts()");
return false;
}
return true;
}
[DllImport("kernel32.dll")]
internal static extern bool SetCommTimeouts(IntPtr hFile, [In] ref COMMTIMEOUTS lpCommTimeouts);
private void SetFault(string who)
{
int num1 = Marshal.GetLastWin32Error();
this.fault = who + "Failed. System Returned Error Code: " + num1.ToString();
}
// Properties
internal string Fault
{
get
{
return this.fault;
}
}
internal uint ReadConstant
{
get
{
return this.ct.readTotalTimeoutConstant;
}
set
{
this.ct.readTotalTimeoutConstant = value;
}
}
internal uint ReadInterval
{
get
{
return this.ct.readIntervalTimeout;
}
set
{
this.ct.readIntervalTimeout = value;
}
}
internal uint ReadMultiplier
{
get
{
return this.ct.readTotalTimeoutMultiplier;
}
set
{
this.ct.readTotalTimeoutMultiplier = value;
}
}
internal uint WriteConstant
{
get
{
return this.ct.writeTotalTimeoutConstant;
}
set
{
this.ct.writeTotalTimeoutConstant = value;
}
}
internal uint WriteMultiplier
{
get
{
return this.ct.writeTotalTimeoutMultiplier;
}
set
{
this.ct.writeTotalTimeoutMultiplier = value;
}
}
// Fields
private COMMTIMEOUTS ct;
//定义一个结构体COMMTIMEOUTS的实例ct
private string fault;
//声明一个字符串fault,用于指出出错信息
// Nested Types
[StructLayout(LayoutKind.Sequential)]
internal protected struct COMMTIMEOUTS
{
internal uint readIntervalTimeout;
//定义一个整形变量,用于指出读取端口信息的间隔时间
internal uint readTotalTimeoutMultiplier;
//定义一个整形变量,用于指出读取累加器总的间隔时间
internal uint readTotalTimeoutConstant;
//定义一个整形变量,用于指出读取定时器的总间隔时间
internal uint writeTotalTimeoutMultiplier;
//定义一个整形变量,用于指出写入累加器总的间隔时间
internal uint writeTotalTimeoutConstant;
//定义一个整形变量,用于指出写入取定时器的总间隔时间
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -