b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C#取消线程

电脑杂谈  发布时间:2020-06-13 21:05:17  来源:网络整理

c#对windows 窗体控件进行线程安全调用_c# 不同线程不安全调用_c++ 安全线程

The

.net类库帮助我们关闭了窗口. 如果此窗口是系统的主窗口,则关闭该窗口应退出整个应用程序.

但实际上有时并非如此. 关闭窗口只会停止当前窗口的消息循环.

系统的主窗口实质上是在Main函数中启动消息循环的窗口. 该消息循环结束后,Main函数基本上完成了历史任务,整个应用程序自然结束了.

Application.Exit()方法将终止所有线程上的消息循环. 通常情况下,无论在何处调用此方法,程序都可以退出.

但是,如果您在程序中添加了一些耗时甚至无尽的线程c#对windows 窗体控件进行线程安全调用,即使消息循环终止了,程序也不会结束.

一种更为适度和适当的方法是在结束消息循环之前终止所有新创建的线程.

有时我们甚至无法弄清正在执行哪个顽固的线程,我们需要使用一些暴力手段. .net为我们提供了Environment.Exit(0)方法. 调用此方法时,应用程序被迫退出.

打开子窗体并执行操作时,如果单词窗体中存在循环操作. 如果我在操作过程中关闭了子窗体,我发现尽管窗体已关闭,但子窗体中的循环程序尚未退出,它正在执行,并且占用了系统资源. 直到循环结束,它才释放资源. 虽然您在单词形式的Closed事件中编写了以下代码:

c++ 安全线程_c#对windows 窗体控件进行线程安全调用_c# 不同线程不安全调用

private void frmFileDisposal_Closed(对象发送方,System.EventArgs e)

{

this.Dispose();

this.Close();

}

从MSDN和信息中,您可以知道,尽管Dispose()方法可以释放当前表单的资源,但是它不能强制循环结束,

要强制突出显示当前程序,请使用System.Environment.Exit(int exitcode)方法;此方法: 终止当前进程,并为底层操作系统提供指定的退出代码.

问题解决如下:

private void frmFileDisposal_Closed(对象发送方,System.EventArgs e)

c#对windows 窗体控件进行线程安全调用_c++ 安全线程_c# 不同线程不安全调用

{

System.Environment.Exit(System.Environment.ExitCode);

this.Dispose();

this.Close();

}

或将其放在事件中:

while(MessageBox.Show(“退出当前表单?”,“”,MessageBoxButtons.YesNo)== DialogResult.No)

{

for(int j = 1; j <= i; j ++)

c#对windows 窗体控件进行线程安全调用_c# 不同线程不安全调用_c++ 安全线程

{

listBox1.Items.Add(j);

}

}

System.Environment.Exit(System.Environment.ExitCode);

还有另一种方法: System.Threading.Thread.CurrentThread.Abort();

或Process.GetCurrentProcess(). Kill()

或Application.ExitThread();

或Application.ExitThread()

c++ 安全线程_c#对windows 窗体控件进行线程安全调用_c# 不同线程不安全调用

但是,以上方法被迫直接退出整个程序,而不仅仅是关闭子窗体. 可能还会引起一些问题,

我认为最好的方法是在子窗体的Closing事件中编写一个循环退出条件,这样就可以避免某些未知错误,并且可以关闭子窗体并释放所占用的子窗体资源

Application.Exit();方法停止在所有线程上运行的所有消息循环并关闭应用程序的所有窗口

Application.Exit是强制退出方法,类似于Win32中的PostQuitMessage(). 这意味着放弃所有消息泵,释放调用堆栈,并将执行返回给系统.

在Windows(Win32或.NET)中关闭应用程序的正确方法是关闭其主应用程序窗口(例如Form.Close). 主消息泵之后剩余的所有窗口都需要手动关闭. 在应用程序退出之前,通过调用Form.Close或Form.Dispose来清除窗口是一个好习惯,但这需要您有意识地做到这一点. 我们需要记住c#对windows 窗体控件进行线程安全调用,.NET Framework的OnClosing()是Win32 WM_CLOSE的托管版本,而不是WM_DESTROY.

此外,如果使用form.Close(),则可以通过处理OnClosing或OnClosed事件来允许应用程序清除内容,关闭文件等. 如果您通过Application.Exit强制退出应用程序,则无法调用这些事件.

Application.Exit();方法停止在所有线程上运行的所有消息循环并关闭应用程序的所有窗口

Application.Exit是强制退出方法,类似于Win32中的PostQuitMessage(). 这意味着放弃所有消息泵,释放调用堆栈,并将执行返回给系统

Environment.Exit(0)方法,调用此方法,应用程序被迫退出


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-244252-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...