进程

  1. //获得当前程序中所有正在运行的进程
  2. //Process[] pros = Process.GetProcesses();
  3. //foreach (var item in pros)
  4. //{
  5. // //不试的不是爷们
  6. // //item.Kill();
  7. // Console.WriteLine(item);
  8. //}
  9. //通过进程打开一些应用程序
  10. //Process.Start("calc");
  11. //Process.Start("mspaint");
  12. //Process.Start("notepad");
  13. //Process.Start("iexplore", "http://www.baidu.com");
  14. //通过一个进程打开指定的文件
  15. ProcessStartInfo psi = new ProcessStartInfo(@"C:\Users\SpringRain\Desktop\1.exe");
  16. //第一:创建进程对象
  17. Process p = new Process();
  18. p.StartInfo = psi;
  19. p.Start();
  20. // p.star
  21. Console.ReadKey();

线程

线程休眠

  1. namespace _16_线程
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. Thread.Sleep(3000);
  8. Console.WriteLine("Hello World");
  9. Console.ReadKey();
  10. }
  11. }
  12. }

开启,终止线程

  1. //终止线程
  2. th.Abort();
  3. //启动线程
  4. th.Start();

难点。比如主线程创建一个文本框,然后一个新的线程一直改变这个文本框的值。当关闭这个主线程的时候,那么,由主线程创建的文本框肯定也消失了,但是子线程不会立即消失,那么就会发生异常。
c# 好像默认不支持这个样的跨线程访问资源。我们可以禁用检查它

  1. private Thread th;
  2. private void button1_Click_1(object sender, EventArgs e)
  3. {
  4. //创建一个线程去执行这个方法
  5. th = new Thread(Test);
  6. //标记这个线程准备就绪了,可以随时被执行。具体什么时候执行这个线程,
  7. //由cpu决定
  8. //将线程设置为后台线程
  9. th.IsBackground = true;
  10. th.Start();
  11. }
  12. private void Test()
  13. {
  14. for (int i = 0; i < 10000; i++)
  15. {
  16. //Console.WriteLine(i);
  17. textBox1.Text = i.ToString();
  18. }
  19. }
  20. private void Form1_Load(object sender, EventArgs e)
  21. {
  22. //取消跨线程的访问 检查
  23. Control.CheckForIllegalCrossThreadCalls = false;
  24. }