当一个软件或者游戏很大的时候,我们不可能把所有的功能都集成到一个里面去,有时候,我们需要做一些独立的应用程序来当作一个插件一样嵌入到我们的软件或者游戏当中,这时候,我们就需要使用进程,即CSharp中的Process。Process在一些游戏中可能并不常见,但在软件中就是经常见了,有的软件需要单独的把照片上传或者一些功能模块单独隔离出来做,这样日后要修改这个功能时不需要改动源程序的代码,只需要修改这个进程的代码即可。

    那么问题来了,说了半天,到底什么是进程,我们先来看看百度的解释:

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

    我的天哪,这是一堆什么玩意,这是给本来就懂的人看的吧,一些小白哪能看懂诸如什么数据集合,资源分配和调度。不着急,我们先来看一个小例子,通过这个例子,我们就能大概明白进程到底是个什么玩意。

    首先,我们来新建一个C#的WinForm应用程序,就叫做PhotoUploader,然后把Program中的最后一句显示窗体的代码删掉。然后我们写一段将一张图片转换成字符串并上传到Web服务器上的代码。代码如下图:

   

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PhotoUploader
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if (args.Length < 1)
            {
                MessageBox.Show("未提供照片路径","提示");
                return;
            }

            string imagePath = args[0];
            string photo = ImgToBase64String(imagePath);
            QueryService.QueryServiceSoapClient queryService =
                new QueryService.QueryServiceSoapClient();

            try
            {
                string success = queryService.UploadIdPhoto(imagePath,photo);
                MessageBox.Show("上传成功!","提示");

            }
            catch(Exception e)
            {
                MessageBox.Show("上传过程中出现错误:" + e.Message, "提示");
            }
        }

        static String ImgToBase64String(string path)
        {
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); //将图片以文件流的形式进行保存
            BinaryReader br = new BinaryReader(fs);
            byte[] imgBytesIn = br.ReadBytes((int)fs.Length); //将流读入到字节数组中
            Encoding myEncoding = Encoding.GetEncoding("utf-8");
            string stImageByte = Convert.ToBase64String(imgBytesIn);
            fs.Dispose();
            return stImageByte;
        }
    }
}

     然后我们将这个程序生成一下。然后在新建一个控制台应用程序代码如下:

    

Process p = new Process();
p.StartInfo.FileName = "PhotoDetection.exe";//这里是你刚才编译的文件名字
p.StartInfo.Arguments = fileFullName;//这里是你要上传的图片的名字
p.Start();

     然后我们将先前打包好的那个应用文件拷贝到这个的Debug目录下,运行,就会发现,系统弹出了对应的提示。

     对,其实进程就是这么简单的东西,说的粗一点,就是系统正在执行的exe文件,当然,博主不会说也没能力说出像百度百科那样精确又难懂的语言,这里只是博主的理解。有兴趣的读者可以深入研究一下进程这个类,博主感觉功能还是蛮强大的,这里博主由于篇幅原因就不多做解释了