进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况

进程要使用的类是:Process
它在命名空间:System.Diagnostics;

静态方法Start();

Process.Start("进程名称");

也可以实例化对象,来调用Start()普通方法,但调用普通方法之前需要给
StartInfo属性设置一个对象,来通知它要打开的是哪个进程

            Process p = new Process();
            ProcessStartInfo psi = new ProcessStartInfo("完整exe文件路径名");
            p.StartInfo = psi;
            p.Start();

线程:

一个进程就像是一个公司,默认只有一个老板
老板叫做 主线程
主线程一旦让它去执行一段需要时间的代码,那么就会出现程序假死,失去控制

原因是:线程同一时间只能做一件事,而主线程是操作窗体控制的,一旦被占用,那么窗体就没人控制了。

解决办法:
招一个员工帮老板干这个活

开启线程:
线程基本使用:

//创建一个线程对象,告诉它要执行的是哪一个方法
Thread th = new Thread(aaa);

//准备好了,开始执行,不是立即开始,CPU决定什么时候开始
th.Start();

需要跨线程访问对象:
程序默认不允许跨线程访问对象,因为监控开着
需要关闭监控
在构造函数的构造方法下面写上:

Control.CheckForIllegalCrossThreadCalls = false;

需要传参的线程:
线程需要执行一个方法,而这个方法允许有一个参数,并且这个参数必须是object类型的

Start的时候可以传一个object

 th.Start(sender);

程序退出立刻关闭所有线程:
线程默认开启为前台线程,程序必须将所有的前台线程执行完毕后才会真正退出程序
解决办法:将线程变为后台线程

th.IsBackground = true;

TreeView递归加载树形菜单

最好不要直接访问数据库进行加载,

方法有二:

  一:查询全部数据存入List<>进行修改

  二:查询全部数据存入DataSet进行修改

         List<China> AllList = new List<China>();

         public Form1()
         {
             InitializeComponent();
             AllList = new ChinaData().Select();

             TreeNode tn1 = new TreeNode("中国");
             tn1.Tag = ";

             NodesBind(tn1);

             treeView1.Nodes.Add(tn1);

         }

         public void NodesBind(TreeNode tn)
         {
             //lambda 表达式
             List<China> clist = AllList.Where(r => r.ParentAreaCode == tn.Tag.ToString()).ToList();

             foreach (China c in clist)
             {
                 TreeNode tnn = new TreeNode(c.AreaName);
                 tnn.Tag = c.AreaCode;

                 NodesBind(tnn);

                 tn.Nodes.Add(tnn);
             }
         }

方法一

发送邮件:

            //设置要调用的发送邮件的服务器
            SmtpClient smtp = new SmtpClient("smtp.sina.cn");
            //创建发信人对象
            MailAddress from = new MailAddress(textBox1.Text);
            //创建收信人对象
            MailAddress to = new MailAddress(textBox2.Text);
            //要发送的邮件对象,包含4个内容需要填充
            MailMessage mail = new MailMessage(from, to);
            //设置邮件的标题
            mail.Subject = textBox3.Text;
            //设置邮件的主体正文内容
            mail.Body = textBox4.Text;
            //创建发件人身份验证凭证
            NetworkCredential cred = new NetworkCredential(textBox1.Text, textBox5.Text);
            //将凭证证书绑定到服务端对象上,一并发送出去
            smtp.Credentials = cred;
            //此服务器对象执行发送邮件功能
            smtp.Send(mail);

简单的邮件发送DLL:Email.zip

WinForm 进程、线程、TreeView递归加载、发送邮件--2016年12月13日的更多相关文章

  1. winform进程、线程、TreeView递归加载

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...

  2. WinForm TreeView递归加载

    这个其实通俗一点讲就是的树状分支图 首先利用递归添加数据 数据放入 treeView1.Nodes.Add() 中 public Form3() { InitializeComponent(); Tr ...

  3. treeview递归加载

    实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  4. 省市数据递归加载到TreeView

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 将Xml文件递归加载到TreeView中

    #region [通过XDocument的方式将Xml文件递归到TreeView控件中] //读取Xml文件(XDocument) //1.加载Xml文件 XDocument  document=XD ...

  6. C# IO操作(五)文件的递归加载

    本篇是一个案例,其核心通过代码展示代码中的递归这个用法,程序的界面如下:

  7. (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明

    原文:http://blog.csdn.net/java_jh/article/details/20068915 迟点出更新的.这个还有BUG.因为软引应不给力了.2.3之后 前几天的原文有一个线程管 ...

  8. 递归加载Treeview

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  9. WinForm中使用BackgroundWorker异步加载数据并使用进度条

    在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...

随机推荐

  1. 为什么要用 WebSocket

    使用传统的 HTTP 轮询或者长连接的方式也可以实现类似服务器推送的效果,但是这类方式都存在资源消耗过大或推送延迟等问题.而 WebSocket 直接使用 TCP 连接保持全双工的传输,可以有效地减少 ...

  2. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'dd' in 'where clause'

    今天在使用mysql数据库查找数据的时候报错,错误信息如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown co ...

  3. 【BZOJ-4698】Sandy的卡片 后缀数组

    4698: Sdoi2008 Sandy的卡片 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 140  Solved: 55[Submit][Stat ...

  4. ngrok反向隧道--获取内网IP

    ngrok反向隧道 前情提要:小明与小白各有一台主机,两台主机在同一内网,小明想直接通过内网ssh到小白的主机上.但是小白的ip地址会不断的变化,而小明不想每次都要麻烦小白查看ip.于是小明催生了一个 ...

  5. Drop it

    FCC题目:队友该卖就卖,千万别舍不得. 让我们来丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止. 第二个参数,func,是一个函数.用来测试数组的第一个元素,如果返回 ...

  6. Java 配置maven及阿里云镜像

    一:配置maven 1.下载maven,选择Binary tar.gz,解压拷贝到目录/usr/local/ https://maven.apache.org/download.cgi 2.配置系统默 ...

  7. php+swoole+websocket

    //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0", 9502); // ...

  8. HTML5规范-相关资料链接(大多都是英文文档)

    网站做的更规范,尽量选择正确的HTML5结构元素.地址:http://html5doctor.com/happy-1st-birthday-us/#flowchat 了解算法和分块      知道文档 ...

  9. pycharm5注册码

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  10. 百度地图api调用

    <script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.1&am ...