c# 请问如何在多线程任务中结束全部线程,关闭窗体?

如上。我需要在命令行下启动一个线性用来加载窗体,命令行读入用户指令操作窗体。那么当窗体被close时,如何连带主线程一起结束掉?Application.Exit()不好用... 如上。我需要在命令行下启动一个线性用来加载窗体,命令行读入用户指令操作窗体。那么当窗体被close时,如何连带主线程一起结束掉?
Application.Exit()不好用呀。
MainThread.Abort()也不行
closed事件中写入只能结束窗体不能结束主线程。哪有father?我把主线程用参数传递到窗体执行的Abort()但是没有效果。

很感谢二楼。但是我用的是命令行。跟窗体执行Dispose()方法……那个。不太一样不太一样。
主线程用来读命令,另外的一个线程启动窗体Application.Run(MainWindow);
展开
 我来答
ht7963013
2009-05-07 · 超过15用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:50万
展开全部
Thread thread1 = new Thread(new ThreadStart(accp1));
thread1.IsBackground = true;
thread1.Start();

thread1.IsBackground = true;
上面的意思是把这个新线程设置成(前台或着后台...我忘了)线程,,,也就是当启动它的主进程关闭的时候它也关闭.
18356771
2009-05-06 · TA获得超过585个赞
知道小有建树答主
回答量:576
采纳率:100%
帮助的人:420万
展开全部
最好的方法是用委托啦
在线程窗体的close事件中:
this.invoke()参数怎么填 忘了。
this是主窗体,至于怎么传给线程窗体,不难吧。
我做了个小测试 ,我这么写是可以关掉主窗体的
主窗体:
namespace test
{
public partial class Form1 : Form
{
public delegate void delegateclose();
delegateclose D;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
D = new delegateclose(cccc);
Thread t = new Thread(new ThreadStart(threadstart));
t.Start();
}

private void threadstart()
{
delegateclose ddd = new delegateclose(this.newform);
this.Invoke(ddd);

}

private void newform()
{
Form2 f = new Form2(this, D);
f.Show();
}

public void cccc()
{
this.Dispose();
}
}
}
线程窗体:
namespace test
{
public partial class Form2 : Form
{
Form1 F;
Form1.delegateclose D;
public Form2(Form1 f,Form1.delegateclose d)
{
InitializeComponent();
F = f;
D = d;
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
F.Invoke(D);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暴走草稚
2009-05-06 · TA获得超过167个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:0
展开全部
在closed事件里写。
顺便把father也结束掉。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
卜慧僪念梦
2020-01-04 · TA获得超过1110个赞
知道小有建树答主
回答量:1687
采纳率:100%
帮助的人:8万
展开全部
最好的方法是用委托啦
在线程窗体的close事件中:
this.invoke()参数怎么填
忘了。
this是主窗体,至于怎么传给线程窗体,不难吧。
我做了个小测试
,我这么写是可以关掉主窗体的
主窗体:
namespace
test
{
public
partial
class
Form1
:
Form
{
public
delegate
void
delegateclose();
delegateclose
D;
public
Form1()
{
InitializeComponent();
}
private
void
button1_Click(object
sender,
EventArgs
e)
{
D
=
new
delegateclose(cccc);
Thread
t
=
new
Thread(new
ThreadStart(threadstart));
t.Start();
}
private
void
threadstart()
{
delegateclose
ddd
=
new
delegateclose(this.newform);
this.Invoke(ddd);
}
private
void
newform()
{
Form2
f
=
new
Form2(this,
D);
f.Show();
}
public
void
cccc()
{
this.Dispose();
}
}
}
线程窗体:
namespace
test
{
public
partial
class
Form2
:
Form
{
Form1
F;
Form1.delegateclose
D;
public
Form2(Form1
f,Form1.delegateclose
d)
{
InitializeComponent();
F
=
f;
D
=
d;
}
private
void
Form2_FormClosed(object
sender,
FormClosedEventArgs
e)
{
F.Invoke(D);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
屠晖终萧曼
2019-08-09 · TA获得超过1195个赞
知道小有建树答主
回答量:1727
采纳率:100%
帮助的人:7.9万
展开全部
可以用线程的
join方法
等待线程结束。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式