2020年8月

定义一个公共类:

public class TaskPublic
{
    public static TaskScheduler TaskScheduler;
    public static Task BeginInvoke(Action action)
    {
        var task = new Task(action);
        task.Start(TaskScheduler);
        return task;
    }
}

在界面中初始化TaskScheduler全局变量:

TaskPublic.TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext();

使用方式:

TaskPublic.BeginInvoke(() =>
{
    MessageBox.Show("Test");
});

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace FeiyuIT
{
    /// <summary>
    /// 时间工具类
    /// </summary>
    public class DateTimeUtil
    {
        private static DateTime _dtStart = new DateTime(1970, 1, 1, 8, 0, 0);

        /// <summary> 
        /// 获取时间戳 
        /// </summary>  
        public static string GetTimeStamp(DateTime dateTime)
        {
            return Convert.ToInt64(dateTime.Subtract(_dtStart).TotalMilliseconds).ToString();
        }

        /// <summary> 
        /// 根据时间戳获取时间 
        /// </summary>  
        public static DateTime TimeStampToDateTime(string timeStamp)
        {
            return _dtStart.AddMilliseconds(Convert.ToInt64(timeStamp));
        }

        /// <summary> 
        /// 根据时间戳获取时间 
        /// </summary>  
        public static DateTime TimeStampToDateTime(long timeStamp)
        {
            if (timeStamp > 0)
            {
                return _dtStart.AddMilliseconds(timeStamp);
            }
            return DateTime.MinValue;
        }

        /// <summary>
        /// 日期文本转时间戳文本
        /// </summary>
        public static string DateStrToTSstr(string datetime)
        {
            return GetTimeStamp(DateTime.Parse(datetime));
        }
    }
}

    /// <summary>
    /// [颜色:16进制转成RGB]
    /// </summary>
    /// <param name="strColor">设置16进制颜色 [返回RGB]</param>
    /// <returns></returns>
    public static Color Hex16ToRgb(this string strHxColor)
    {
        try
        {
            if (strHxColor == null)
            {
                return System.Drawing.Color.FromArgb(0, 0, 0);
            }
            if (strHxColor.Length == 0)
            {//如果为空
                return System.Drawing.Color.FromArgb(0, 0, 0);//设为黑色
            }
            else
            {//转换颜色
                return System.Drawing.Color.FromArgb(System.Int32.Parse(strHxColor.Substring(1, 2),
                System.Globalization.NumberStyles.AllowHexSpecifier),
                System.Int32.Parse(strHxColor.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier),
                System.Int32.Parse(strHxColor.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier));
            }
        }
        catch
        {//设为黑色
            return System.Drawing.Color.FromArgb(0, 0, 0);
        }
    }

    /// <summary>
    /// [颜色:RGB转成16进制]
    /// </summary>
    /// <param name="color">颜色</param>
    /// <returns>十六进制值,如果参数为空,默认返回#000000</returns>
    public static string ToHex16Str(this Color color)
    {
        if (color.IsEmpty)
            return "#000000";
        string R = Convert.ToString(color.R, 16);
        if (R == "0")
            R = "00";
        string G = Convert.ToString(color.G, 16);
        if (G == "0")
            G = "00";
        string B = Convert.ToString(color.B, 16);
        if (B == "0")
            B = "00";
        string HexColor = "#" + R + G + B;
        return HexColor.ToUpper();
    }

    /// <summary>
    /// [颜色:RGB转成字符串]
    /// </summary>
    /// <param name="R">红 int</param>
    /// <param name="G">绿 int</param>
    /// <param name="B">蓝 int</param>
    /// <returns></returns>
    public static string RgbToStr(this Color color)
    {
        if (color.IsEmpty)
            return "#000000";
        return ColorTranslator.ToHtml(color);
    }

C# 字符串超长省略扩展函数

1.方法定义

    /// <summary>
    /// 超长省略
    /// </summary>
    /// <param name="RawString"></param>
    /// <param name="Length"></param>
    /// <returns></returns>
    public static string VeryLongOmit(this string RawString, int Length)
    {
        try
        {
            if (RawString == null)
            {
                return "";
            }
            if (RawString.Length <= Length)
            {
                return RawString;
            }
            else
            {
                for (Int32 i = RawString.Length - 1; i >= 0; i--)
                {
                    if (System.Text.Encoding.GetEncoding("GB2312").GetByteCount(RawString.Substring(0, i)) < Length)
                    {
                        return RawString.Substring(0, i) + "...";
                    }
                }
                return "...";
            }
        }
        catch (Exception)
        {
            return "";
        }
    }

2.使用方法

"1234567890".VeryLongOmit(5)

通过扩展Image对象方法从而实现设置图片为圆形

    /// <summary>
    /// 设置PictureBox为圆形
    /// </summary>
    /// <param name="img"></param>
    public static Image GetPictureCircle(this Image image)
    {
        try
        {
            var img = (Image)image.Clone();
            var rec = new Rectangle(0, 0, img.Width, img.Height);// 矩形
            var size = new Size(img.Width, img.Height);// 大小

            Bitmap bitmap = new Bitmap(size.Width, size.Height);// 位图
            using (Graphics g = Graphics.FromImage(bitmap))// 图形
            {
                using (TextureBrush br = new TextureBrush(img, WrapMode.Tile, rec))// 纹理刷
                {
                    // 尺度变换
                    br.ScaleTransform(bitmap.Width / (float)rec.Width, bitmap.Height / (float)rec.Height);
                    g.SmoothingMode = SmoothingMode.HighQuality;
                    // 填充椭圆
                    g.FillEllipse(br, new Rectangle(Point.Empty, size));
                    GC.Collect();
                }
            }
            return bitmap;
        }
        catch (Exception)
        {
            return image;
        }
    }

调用

Image img = new Image();
img.GetPictureCircle();

实现原理

每个窗体对象中都默认包含了一个tag属性
在窗体构造函数中给tag属性赋值一个FrmTagEntity对象
通过下面的方法就可以实现只打开一个窗体

扩展方法

        /// <summary>
        /// 只显示一个对象窗口
        /// </summary>
        /// <param name="cskin"></param>
        /// <remarks>
        /// </remarks>
        public static void ShowOne(this CCSkinMain cskin)
        {
            string className = cskin.GetType().Name;
            foreach (Form f in Application.OpenForms)
            {
                var fClassName = f.GetType().Name;
                if (fClassName == className)
                {
                    if (f != null)
                    {
                        f.Visible = true;
                        f.Focus();   //打开过就让其获得焦点
                        return;
                    }
                }
            }
            cskin.Show();   //重新new一个Show出来
        }

        /// <summary>
        /// 只显示一个对象窗口
        /// </summary>
        /// <param name="cskin"></param>
        /// <remarks>
        /// </remarks>
        public static void ShowOne(this Form form)
        {
            string className = form.GetType().Name;
            foreach (Form f in Application.OpenForms)
            {
                var fClassName = f.GetType().Name;
                if (fClassName == className)
                {
                    if (f != null)
                    {
                        f.Visible = true;
                        f.Focus();   //打开过就让其获得焦点
                        return;
                    }
                }
            }
            form.Show();   //重新new一个Show出来
        }

实体类

    /// <summary>
    /// 窗体通用对象实体
    ///     用于窗体打开时的判断,并且可绑定相应的对象数据
    /// </summary>
    public class FrmTagEntity
    {
        /// <summary>
        /// 通用标识,用于窗体id识别
        ///     用户id、群id
        /// </summary>
        public int ID { get; set; }

        /// <summary>
        /// 通用绑定对象,用于窗体对象数据绑定
        /// </summary>
        public object Data { get; set; }

    }

调用方式

    var form = new FrmGoChatGroup(detailsGroup);
    form.ShowOneTagID();

扩展方法

    /// <summary>
    /// 只显示一个Text相同的窗口
    /// </summary>
    /// <param name="cskin"></param>
    /// <remarks>
    /// </remarks>
    public static void ShowOneTagID(this Form form)
    {
        string className = form.GetType().Name;
        foreach (Form f in Application.OpenForms)
        {
            var fClassName = f.GetType().Name;
            if (fClassName == className)
            {
                if (f != null)
                {
                    if (f.Tag is FrmTagEntity && form.Tag is FrmTagEntity)
                    {
                        var fTagEntity = f.Tag as FrmTagEntity;
                        var frmTagEntity = form.Tag as FrmTagEntity;

                        if (fTagEntity.ID == frmTagEntity.ID)
                        {
                            f.Visible = true;
                            f.Focus();   //打开过就让其获得焦点
                            return;
                        }
                    }
                }
            }
        }
        form.Show();   //重新new一个Show出来
    }

窗体构造函数

    public partial class FrmGoChatGroup : CCSkinMain, ISkinHandle
    {
        public FrmGoChatGroup(DetailsGroupData groupDatas)
        {
            InitializeComponent();
            this.Tag = new FrmTagEntity() { ID = groupDatas.groupId, Data = groupDatas };
        }
    }

实体类

    /// <summary>
    /// 窗体通用对象实体
    ///     用于窗体打开时的判断,并且可绑定相应的对象数据
    /// </summary>
    public class FrmTagEntity
    {
        /// <summary>
        /// 通用标识,用于窗体id识别
        ///     用户id、群id
        /// </summary>
        public int ID { get; set; }

        /// <summary>
        /// 通用绑定对象,用于窗体对象数据绑定
        /// </summary>
        public object Data { get; set; }

    }