VS常用快捷键:
https://www.cnblogs.com/happyzwt/p/7769129.html
#########################################c#开发########################################################################
最近遇到一个需求:在PC端连接设备wifi热点之后,与设备建立socket连接,对设备进行参数设置和获取。
经过一番研究,决定用C#来实现。
一.开发环境配置
1)下载并安装Microsoft Visual Studio
2)创建c#工程
二.C#工程介绍
1)工程结构
二.UI创建
1. Form创建成功后,从工具箱(工具栏视图可打开)拖拽控件到Form上即可。
在“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