VS常用快捷键:

https://www.cnblogs.com/happyzwt/p/7769129.html




#########################################c#开发########################################################################

最近遇到一个需求:在PC端连接设备wifi热点之后,与设备建立socket连接,对设备进行参数设置和获取。

经过一番研究,决定用C#来实现。


一.开发环境配置

      1)下载并安装Microsoft Visual Studio

      2)创建c#工程

            

二.C#工程介绍

      1)工程结构

           QQ截图20181018115354.png

        

二.UI创建            

        1. Form创建成功后,从工具箱(工具栏视图可打开)拖拽控件到Form上即可。

                    image.png


                    在“xx.Designer.cs"这个文件里,可以通过代码对UI进行精确编辑。

        

        2.双击窗体或者控件,就能通过代码编辑控件事件。

            1)其实form类似android里的Activity类,在form里引用控件不需要findViewById,直接使用控件name属性就能得到控件。

           因为InitializeComponent这个过程,编辑器已经自动完成了findViewById的过程

            2)如果在非form类里引用控件,需要将控件传递到目标类中。通常在form里定义内部类,然后创建对象,再把控件封装进去。

       /*
         * Form的view的封装
         */
        public class ViewHolder
        {
            private Form mainForm;

            public Form MainForm
            {
                get { return mainForm; }
                set { mainForm = value; }
            }
            ...
         }

              将viewHolder传入给view,然后调用。

          private void connectServer()    
          {
                mainSocket.connectServer(new ConnectResultCallBackClass(this, viewHolder));
          }

        3. 在UI线程里刷新UI

            和android里一样,不能直接在子线程里刷新UI。

      //要在主线程里运行
               _viewHolder.MainForm.Invoke((EventHandler)(delegate
               {
                   // 这里写你的控件代码,比如
                   _viewHolder.Tb_ble_name.Text = bleParams[0];
                   _viewHolder.Tb_ble_face_num.Text = bleParams[1];
                   _viewHolder.Tb_hetong_num.Text = bleParams[2];
                   _viewHolder.Tb_ble_mac.Text = bleParams[3];
               }
               ));

               

  

三.创建线程            

        1.创建并启动线程

  private void connectDeviceInThread(){
            viewHolder.Lb_connect_state.ForeColor = Color.Black;
            this.lb_connect_state.Text = "正在连接设备...";
            LogUtil.printf("正在连接设备...");
            Thread shutdownlazer_thread = new Thread(connectServer);
            shutdownlazer_thread.Start();
        }

         线程注意最后要销毁

 

四.定义回调            

        1.创建接口

        2.创建接口的实现类(注意c#不像java有匿名内部类)

           这样会造成类的爆炸式增长,所以需要运用c#的委托机制进行回调。https://www.cnblogs.com/z888/p/5798871.html



五.生成DLL文件

  https://jingyan.baidu.com/article/d7130635d5b15113fdf47529.html