深入浅析WinForm 进程、线程及区别介绍
一、进程
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。
它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。
Process类,用来操作进程。
命名空间:usingSystem.Diagnostics;
Process.Start("calc");//打开计算器
Process.Start("mspaint");//打开画图
Process.Start("iexplore","http://www.baidu.com");//打开浏览器并指定地址
(一)通过一个进程,打开指定的文件:
1.创建进程对象
Processp=newProcess();
2.创建一个StartInfo对象,是指定带盘符的路径。
ProcessStartInfopsi=newProcessStartInfo(@"C:\user\.....);
3.进程指定及开始
p.StartInfo=psi;//指定路径 p.Start();//开始进程
(二)通过文件选择框让用户自己选择所需要打开的程序并打开:
privatevoidbutton1_Click(objectsender,EventArgse)
{
//这是选择文件的类型
openFileDialog1.Filter="应用程序|*.exe";
//显示对话框并且判断用户有没有选中文件
if(openFileDialog1.ShowDialog()==DialogResult.OK)
{
//取文件路径
stringpath=openFileDialog1.FileName;
//创建一个新的进程
Processp=newProcess();
//制造进程的启动信息
ProcessStartInfopsf=newProcessStartInfo(path);
//设置该进程的执行信息
p.StartInfo=psf;
//启动进程
p.Start();
}
}
例子:注销
//这个path就是你要调用的exe程序的绝对路径
stringpath=Application.StartupPath;
//获取自身exe或dll的文件名路径
strings=System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
privatevoidbutton2_Click(objectsender,EventArgse)
{
//打开该程序
//取该程序文件的路径
//stringpath=Application.StartupPath;
stringpath=System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
//造一个进程
Processp=newProcess();
//造一个进程的启动信息
ProcessStartInfops=newProcessStartInfo(path);
//设置进程启动信息
p.StartInfo=ps;
//启动进程
p.Start();
//关闭程序
this.Close();
}
例:窗口实现鼠标拖动
privateintx;
privateinty;
privatevoidpictureBox1_MouseDown(objectsender,MouseEventArgse)
{
//鼠标点击时的XY坐标
x=e.X;
y=e.Y;
}
privatevoidpictureBox1_MouseMove(objectsender,MouseEventArgse)
{
//判断鼠标按下的是左键
if(e.Button==System.Windows.Forms.MouseButtons.Left)
{
//边距=当前的距离+移动的距离
this.Left=this.Left+(e.X-x);
this.Top=this.Top+(e.Y-y);
}
}
二、线程
线程,有时被称为轻量级进程(LightweightProcess,LWP),是程序执行流的最小单元。
区别:进程有自己独立的资源,线程共用资源。
Thread类,命名空间:usingSystem.Threading;
程序默认只有一个主线程,如果做复杂处理,则会出现假死状态,因为一条线程同时只能做一件事。
多线程的作用:同时做多件事情,节约时间,后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况。
创建线程:
开启新的线程执行哪个函数
Threadth=newThread(里面写线程要操作的方法,方法名不含括号);
标记这个线程准备就绪了,可以随时执行,CPU决定执行时间
th.Start();
线程分为两种:
前台线程-只有所有的前台线程都关闭才能完成程序关闭。
后台线程-只要所有的前台线程都结束,后台线程则会自动结束。
两者的区别:应用程序必须运行完所有的前台线程才可以退出;
而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动
结束。
设置th线程为后台线程
th.IsBackground=true;
控件由主线程创建,新线程想要访问主线程资源,程序默认是不允许跨线程访问的。
取消跨线程访问限制
在界面Load事件里
Control.CheckForIllegalCrossThreadCalls=false;
FormClosing事件中:
//判断新线程是否为null,如果为null,那就自动关闭了
if(th!=null)
{
//立即结束线程,但是结束后就不能再被重新Start了
th.Abort();
}
执行带参数的函数:
如果线程执行的方法需要参数,那么要求这个参数必须是object类型!
Threadth=newThread(Test);//参数名不需要带括号
th.IsBackground=true;
th.Start("123");//在这里传入Test函数所需要的参数
这样函数中就需要强转:
privatevoidTest(objects)
{
stringss=(string)s;
......
}
以上所述是小编给大家介绍的WinForm进程、线程及区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!