- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章深入浅析WinForm 进程、线程及区别介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、进程 。
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.
它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.
Process 类,用来操作进程.
命名空间:using System.Diagnostics,
1
2
3
|
Process.Start(
"calc"
);
//打开计算器
Process.Start(
"mspaint"
);
//打开画图
Process.Start(
"iexplore"
,
"http://www.baidu.com"
); //打开浏览器并指定地址
|
(一)通过一个进程,打开指定的文件:
1.创建进程对象 。
1
|
Process p =
new
Process();
|
2.创建一个StartInfo对象,是指定带盘符的路径.
1
|
ProcessStartInfo psi =
new
ProcessStartInfo(@"C:\user\.....);
|
3.进程指定及开始 。
1
2
|
p.StartInfo = psi;
//指定路径
p.Start();
//开始进程
|
(二)通过文件选择框让用户自己选择所需要打开的程序并打开:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
private
void
button1_Click(
object
sender, EventArgs e)
{
//这是选择文件的类型
openFileDialog1.Filter =
"应用程序|*.exe"
;
//显示对话框并且判断用户有没有选中文件
if
(openFileDialog1.ShowDialog() == DialogResult.OK)
{
//取文件路径
string
path = openFileDialog1.FileName;
//创建一个新的进程
Process p =
new
Process();
//制造进程的启动信息
ProcessStartInfo psf =
new
ProcessStartInfo(path);
//设置该进程的执行信息
p.StartInfo = psf;
//启动进程
p.Start();
}
}
|
例子:注销 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//这个path就是你要调用的exe程序的绝对路径
string
path = Application.StartupPath;
//获取自身exe或dll的文件名路径
string
s = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
private
void
button2_Click(
object
sender, EventArgs e)
{
//打开该程序
//取该程序文件的路径
//string path = Application.StartupPath;
string
path = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName;
//造一个进程
Process p =
new
Process();
//造一个进程的启动信息
ProcessStartInfo ps =
new
ProcessStartInfo(path);
//设置进程启动信息
p.StartInfo = ps;
//启动进程
p.Start();
//关闭程序
this
.Close();
}
|
例:窗口实现鼠标拖动 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
private
int
x;
private
int
y;
private
void
pictureBox1_MouseDown(
object
sender, MouseEventArgs e)
{
//鼠标点击时的XY坐标
x = e.X;
y = e.Y;
}
private
void
pictureBox1_MouseMove(
object
sender, MouseEventArgs e)
{
//判断鼠标按下的是左键
if
(e.Button == System.Windows.Forms.MouseButtons.Left)
{
//边距=当前的距离+移动的距离
this
.Left =
this
.Left+(e.X - x);
this
.Top =
this
.Top +(e.Y - y);
}
}
|
2、线程 。
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.
区别:进程有自己独立的资源,线程共用资源.
Thread类, 命名空间:using System.Threading ,
程序默认只有一个主线程,如果做复杂处理,则会出现假死状态,因为一条线程同时只能做一件事.
多线程的作用:同时做多件事情,节约时间,后台运行程序,提高程序的运行效率,也不会使主界面出现无响应的情况.
创建线程:
开启新的线程执行哪个函数 。
1
|
Thread th =
new
Thread( 里面写线程要操作的方法,方法名不含括号 );
|
标记这个线程准备就绪了,可以随时执行,CPU决定执行时间 。
th.Start(),
线程分为两种:
前台线程 - 只有所有的前台线程都关闭才能完成程序关闭.
后台线程 - 只要所有的前台线程都结束,后台线程则会自动结束.
两者的区别:应用程序必须运行完所有的前台线程才可以退出; 。
而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动 。
结束.
设置th线程为后台线程 。
1
|
th . IsBackground =
true
;
|
控件由主线程创建,新线程想要访问主线程资源,程序默认是不允许跨线程访问的.
取消跨线程访问限制 。
在界面Load事件里 。
Control.CheckForIllegalCrossThreadCalls = false,
FormClosing 事件中:
1
2
3
4
5
6
|
//判断新线程是否为null,如果为null,那就自动关闭了
if
(th !=
null
)
{
//立即结束线程,但是结束后就不能再被重新Start了
th.Abort();
}
|
执行带参数的函数:
如果线程执行的方法需要参数,那么要求这个参数必须是object类型! 。
1
2
3
|
Thread th =
new
Thread(Test);
//参数名不需要带括号
th . IsBackground =
true
;
th.Start(
"123"
);
//在这里传入Test函数所需要的参数
|
这样函数中就需要强转:
1
2
3
4
5
|
private
void
Test (
object
s)
{
string
ss = (
string
) s ;
......
}
|
以上所述是小编给大家介绍的WinForm 进程、线程及区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:http://www.cnblogs.com/ShenG1/p/5839618.html 。
最后此篇关于深入浅析WinForm 进程、线程及区别介绍的文章就讲到这里了,如果你想了解更多关于深入浅析WinForm 进程、线程及区别介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我将 Bootstrap 与 css 和 java 脚本结合使用。在不影响前端代码的情况下,我真的很难在css中绘制这个背景。在许多问题中,人们将宽度和高度设置为 0%。但是由于我的导航栏,我不能使用
我正在用 c 编写一个程序来读取文件的内容。代码如下: #include void main() { char line[90]; while(scanf("%79[^\
我想使用 javascript 获取矩阵数组的所有对 Angular 线。假设输入输出如下: input = [ [1,2,3], [4,5,6], [7,8,9], ] output =
可以用pdfmake绘制lines,circles和other shapes吗?如果是,是否有documentation或样本?我想用jsPDF替换pdfmake。 最佳答案 是的,有可能。 pdfm
我有一个小svg小部件,其目的是显示角度列表(参见图片)。 现在,角度是线元素,仅具有笔触,没有填充。但是现在我想使用一种“内部填充”颜色和一种“笔触/边框”颜色。我猜想line元素不能解决这个问题,
我正在为带有三角对象的 3D 场景编写一个非常基本的光线转换器,一切都工作正常,直到我决定尝试从场景原点 (0/0/0) 以外的点转换光线。 但是,当我将光线原点更改为 (0/1/0) 时,相交测试突
这个问题已经有答案了: Why do people write "#!/usr/bin/env python" on the first line of a Python script? (22 个回
如何使用大约 50 个星号 * 并使用 for 循环绘制一条水平线?当我尝试这样做时,结果是垂直(而不是水平)列出 50 个星号。 public void drawAstline() { f
这是一个让球以对角线方式下降的 UI,但球保持静止;线程似乎无法正常工作。你能告诉我如何让球移动吗? 请下载一个球并更改目录,以便程序可以找到您的球的分配位置。没有必要下载足球场,但如果您愿意,也可以
我在我的一个项目中使用 Jmeter 和 Ant,当我们生成报告时,它会在报告中显示 URL、#Samples、失败、成功率、平均时间、最短时间、最长时间。 我也想在报告中包含 90% 的时间线。 现
我有一个不寻常的问题,希望有人能帮助我。我想用 Canvas (android) 画一条 Swing 或波浪线,但我不知道该怎么做。它将成为蝌蚪的尾部,所以理想情况下我希望它的形状更像三角形,一端更大
这个问题已经有答案了: Checking Collision of Shapes with JavaFX (1 个回答) 已关闭 8 年前。 我正在使用 JavaFx 8 库。 我的任务很简单:我想检
如何按编号的百分比拆分文件。行数? 假设我想将我的文件分成 3 个部分(60%/20%/20% 部分),我可以手动执行此操作,-_-: $ wc -l brown.txt 57339 brown.tx
我正在努力实现这样的目标: 但这就是我设法做到的。 你能帮我实现预期的结果吗? 更新: 如果我删除 bootstrap.css 依赖项,问题就会消失。我怎样才能让它与 Bootstrap 一起工作?
我目前正在构建一个网站,但遇到了 transform: scale 的问题。我有一个按钮,当用户将鼠标悬停在它上面时,会发生两件事: 背景以对 Angular 线“扫过” 按钮标签颜色改变 按钮稍微变
我需要使用直线和仿射变换绘制大量数据点的图形(缩放图形以适合 View )。 目前,我正在使用 NSBezierPath,但我认为它效率很低(因为点在绘制之前被复制到贝塞尔路径)。通过将我的数据切割成
我正在使用基于 SVM 分类的 HOG 特征检测器。我可以成功提取车牌,但提取的车牌除了车牌号外还有一些不必要的像素/线。我的图像处理流程如下: 在灰度图像上应用 HOG 检测器 裁剪检测到的区域 调
我有以下图片: 我想填充它的轮廓(即我想在这张图片中填充线条)。 我尝试了形态学闭合,但使用大小为 3x3 的矩形内核和 10 迭代并没有填满整个边界。我还尝试了一个 21x21 内核和 1 迭代,但
我必须找到一种算法,可以找到两组数组之间的交集总数,而其中一个数组已排序。 举个例子,我们有这两个数组,我们向相应的数字画直线。 这两个数组为我们提供了总共 7 个交集。 有什么样的算法可以帮助我解决
简单地说 - 我想使用透视投影从近裁剪平面绘制一条射线/线到远裁剪平面。我有我认为是使用各种 OpenGL/图形编程指南中描述的方法通过单击鼠标生成的正确标准化的世界坐标。 我遇到的问题是我的光线似乎
我是一名优秀的程序员,十分优秀!