⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win32tmout.cs

📁 常见的串口通信程序
💻 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 + -