<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gmadc的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gmadc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gmadc]]></copyright><item><title><![CDATA[C#GridView常用属性]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/108237258</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/108237258</guid><author>gmadc</author><pubDate>Wed, 26 Aug 2020 11:56:24 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/zzh1026/article/details/51366104
]]></description><category></category></item><item><title><![CDATA[C#StatusStrip 添加多个标签，布局]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/108153694</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/108153694</guid><author>gmadc</author><pubDate>Fri, 21 Aug 2020 18:38:04 +0800</pubDate><description><![CDATA[状态栏所有项目(StatusLabel、ProgressBar、DropDownButton等)前添加一个空白的StatusLabel (Text属性为空)，并将其Spring属性设为True。Spring属性的作用是设置该项是否填满剩余空间，设为True以后，当程序运行时后面的项就都挤到右边，实现靠右对齐了。如果更进一步，需要一部分项靠左，一部分靠右，那就在两部分中间插入空白StatusLabel，同时设其Spring属性为True。


            this.statusStrip1.Ite]]></description><category></category></item><item><title><![CDATA[C#Chart控件]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/108141265</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/108141265</guid><author>gmadc</author><pubDate>Fri, 21 Aug 2020 10:04:24 +0800</pubDate><description><![CDATA[DataSet dataSet = new DataSet();
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + @"D:\test\data.xls" + ";" +
            "Extended Properties='Exc...]]></description><category></category></item><item><title><![CDATA[C#DataGridView显示设置]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/108115993</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/108115993</guid><author>gmadc</author><pubDate>Thu, 20 Aug 2020 09:01:58 +0800</pubDate><description><![CDATA[this.dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//列名居中
            this.dataGridView1.RowsDefaultCellStyle.Font = new Font("宋体", 10);//设置列字体
            this.dataGridView1.Columns[1].Width...]]></description><category></category></item><item><title><![CDATA[C#连接EXCEl]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/108095448</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/108095448</guid><author>gmadc</author><pubDate>Wed, 19 Aug 2020 10:57:48 +0800</pubDate><description><![CDATA[C#连接Excel的方法与连接Access的方法类似，同样可以使用OldDBConnection，如下：

String excelPath = "你的Excel文件绝对路径";
	ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + excelPath + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
其中的参数：

Provider就跟Access 的一]]></description><category></category></item><item><title><![CDATA[C#窗口间通讯]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/108020068</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/108020068</guid><author>gmadc</author><pubDate>Sat, 15 Aug 2020 11:31:07 +0800</pubDate><description><![CDATA[主窗体Form1是一个ListBox，单击选中某列时，弹出窗体Form2，Form2中两个控件，一个是TextBox，显示选中的该列的文本，另一个是按钮，点击时将修改后的值回传，且在Form1中修改相应的列的文本，同时Form2关闭。

C#窗体间通讯方法一：传值


public partial class Form2 : Form     
    {     
        private string text;     
        private ListBox lb;     
   .]]></description><category></category></item><item><title><![CDATA[C#接口， 基类，派生类]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/108006679</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/108006679</guid><author>gmadc</author><pubDate>Fri, 14 Aug 2020 16:17:16 +0800</pubDate><description><![CDATA[接口， 基类，派生类


namespace ConsoleApp2
{
    /// &lt;summary&gt;
    /// IPersonIncome接口
    /// &lt;/summary&gt;
    interface IPersonIncome
    {
        double Income { get; }
        void Display();

    }
    /// &lt;summary&gt;
    /// Student类继承接口
    /]]></description><category></category></item><item><title><![CDATA[C#匿名方法]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107978293</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107978293</guid><author>gmadc</author><pubDate>Thu, 13 Aug 2020 14:08:19 +0800</pubDate><description><![CDATA[匿名方法（Anonymous methods）提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。在匿名方法中您不需要指定返回类型，它是从方法主体内的 return 语句推断的。


delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x)
{
    Console.WriteLine("Anonymous Method: {0}", x);
};

代码块 Console.WriteLine]]></description><category></category></item><item><title><![CDATA[C#事件]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107972741</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107972741</guid><author>gmadc</author><pubDate>Thu, 13 Aug 2020 09:57:20 +0800</pubDate><description><![CDATA[通过事件使用委托

事件在类中声明且生成，且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器（publisher） 类。其他接受该事件的类被称为 订阅器（subscriber） 类。事件使用 发布-订阅（publisher-subscriber） 模型。

发布器（publisher） 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器（publisher）类的对象调用这个事件，并通知其他的对象。

订阅器（subscriber） 是]]></description><category></category></item><item><title><![CDATA[C#特性]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107936655</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107936655</guid><author>gmadc</author><pubDate>Tue, 11 Aug 2020 15:35:59 +0800</pubDate><description><![CDATA[创建一个自定义特性：


// 描述如何使用一个自定义特性 SomethingAttribute
[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]    

//********自定义特性SomethingAttribute**************//
public class SomethingAttribute : Attribute    {
    private string name;]]></description><category></category></item><item><title><![CDATA[C# 处理XML]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107330584</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107330584</guid><author>gmadc</author><pubDate>Tue, 14 Jul 2020 14:52:34 +0800</pubDate><description><![CDATA[使用XMLReader


        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            XmlReader xmlReader = XmlReader.Create("books.xml");
            while (xmlReader.Read())
            {
                if ]]></description><category></category></item><item><title><![CDATA[C# 属性访问器]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107196870</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107196870</guid><author>gmadc</author><pubDate>Wed, 08 Jul 2020 08:41:12 +0800</pubDate><description><![CDATA[属性定义


        public class a
        {
            public string name;
        }
        public class b
        {
            private string name;
            public string Name { get { return name; }
                                 set { name = value; }]]></description><category></category></item><item><title><![CDATA[C# 并行和多线程4]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107123948</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107123948</guid><author>gmadc</author><pubDate>Sat, 04 Jul 2020 15:05:04 +0800</pubDate><description><![CDATA[异步编程模型

Begin/End模式

1，委托

在执行委托方法的时候，我们常常会看到一个Invoke，同时也有一对你或许不常使用的BeginInvoke，EndInvoke方法对，当然Invoke方法是阻塞主线程，而BeginInvoke则是另开一个线程。

2，流

在Stream抽象类中提供了这样两对BeginRead/EndRead,BeginWrite/EndWrite（异步读写）的方法，这样它的n多继承类都可以

实现异步读写


        static void Main(strin]]></description><category></category></item><item><title><![CDATA[C#并行和多线程3 (同步机制下)]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107122006</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107122006</guid><author>gmadc</author><pubDate>Sat, 04 Jul 2020 11:43:19 +0800</pubDate><description><![CDATA[CountdownEvent


        //默认的容纳大小为“硬件线程“数
        static CountdownEvent cde = new CountdownEvent(Environment.ProcessorCount);
        static void Main(string[] args)
        {
            //加载User表需要5个任务
            var userTaskCount = 5;

            cde]]></description><category></category></item><item><title><![CDATA[C# 并行和多线程3(同步机制上)]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107119569</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107119569</guid><author>gmadc</author><pubDate>Sat, 04 Jul 2020 10:13:22 +0800</pubDate><description><![CDATA[同步机制

Barrier（屏障同步）

比如我们数据库中有100w条数据需要导入excel，为了在数据库中加速load，我们需要开多个任务去跑，比如这里的4个task，要想load产品表，必须等4个task都跑完用户表才行，那么你有什么办法可以让task为了你两肋插刀呢？它就是Barrier。

如果我们的屏障设为4个task就认为已经满了的话，那么执行中先到的task必须等待后到的task，通知方式也就是barrier.SignalAndWait()，屏障中线程设置操作为new Barrier(4,(i]]></description><category></category></item><item><title><![CDATA[C# LINQ的基本用法实例]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107104864</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107104864</guid><author>gmadc</author><pubDate>Fri, 03 Jul 2020 14:36:57 +0800</pubDate><description><![CDATA[查询数组中小于8的数字并输出


        static void Main(string[] args)
        {
            int[] number = { 2, 4, 6, 8, 10 };
            IEnumerable&lt;int&gt; lowNum = from n in number where n &lt; 8 select n;

            foreach (var val in lowNum )
            {
]]></description><category></category></item><item><title><![CDATA[C# 委托]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107098096</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107098096</guid><author>gmadc</author><pubDate>Fri, 03 Jul 2020 13:57:03 +0800</pubDate><description><![CDATA[定义委托的语法如下


delegata void IntMethodInvoker(int x);

定义了委托 IntMethodInvoker,并指定该委托的每个实例都可以包含一个方法的使用，该方法带有一个int 参数，并返回void。理解委托的一种好方式是把委托当作这样一件事情，它给方法的签名和返回类型指定名称。


        private delegate string GetAString();
        static void Main(string[] args)
      ]]></description><category></category></item><item><title><![CDATA[C# 并行和多线程2]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107085219</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107085219</guid><author>gmadc</author><pubDate>Thu, 02 Jul 2020 17:09:09 +0800</pubDate><description><![CDATA[任务是架构在线程之上的，也就是说任务最终还是要抛给线程去执行。
	
	任务跟线程不是一对一的关系，比如开10个任务并不是说会开10个线程，这一点任务有点类似线程池，但是任务相比线程池有很小 的开销和精确的控制。
	
一：Task

1. 最简单的使用

 开启task有两种方式:

&lt;1&gt; 实例化Task


    //第一种方式开启
         var task1 = new Task(() =&gt;
         {
             Run1();
        .]]></description><category></category></item><item><title><![CDATA[C#并行和多线程1]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107083416</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107083416</guid><author>gmadc</author><pubDate>Thu, 02 Jul 2020 15:10:15 +0800</pubDate><description><![CDATA[Parallel 的使用  parallel.Invoke

var stopWatch = new StopWatch();  //创建一个Stopwatch实例

stopWatch.Start();  //开始计时

stopWatch.Stop();  //停止计时

stopWatch.Reset(); //重置StopWatch

stopWatch.Restart(); //重新启动被停止的StopWatch

stopWatch.ElapsedMilliseconds //获取s...]]></description><category></category></item><item><title><![CDATA[C#获取计算机信息]]></title><link>https://blog.youkuaiyun.com/gmadc/article/details/107077831</link><guid>https://blog.youkuaiyun.com/gmadc/article/details/107077831</guid><author>gmadc</author><pubDate>Thu, 02 Jul 2020 09:47:54 +0800</pubDate><description><![CDATA[using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;


namespace test
{
    /// &lt;summary&gt;
    /// Computer informercial
    /// &lt;/.]]></description><category></category></item></channel></rss>