×

environment exit

environment exit(C#信息框会弹出两次)

admin admin 发表于2022-09-05 00:42:36 浏览112 评论0

抢沙发发表评论

本文目录

C#信息框会弹出两次


  1. 最好全英文,为何有时写窗口关闭();有时写this.Close();

  2. 点击右上角关闭按钮或者代码调用Close都会触发FormClosing事件

  3. 要让代码Close时候不触发FormClosing事件,可以在Close方法前面用类似下面的代码

    this.FormClosing -= this.登录窗口_FormClosing


C# 为什么我关闭窗体后,端口却还开着,程序还在进程中


Environment.Exit(0);
先把资源释放,然后关闭
这个基本上能解决大多数关闭问题
我的方法你用了吗?你用下吧
肯定能关闭的

请高手帮我解决一个C#问题


using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Diagnostics;namespace WindowsApplication1
{
static class Program
{
/// 该函数设置由不同线程产生的窗口的显示状态
/// 《/summary》
/// 《param name=“hWnd“》窗口句柄《/param》
/// 《param name=“cmdShow“》指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分《/param》
/// 《returns》如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零《/returns》
[System.Runtime.InteropServices.DllImport(“User32.dll“)]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
/// 《summary》
/// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。
/// 系统给创建前台窗口的线程分配的权限稍高于其他线程。
/// 《/summary》
/// 《param name=“hWnd“》将被激活并被调入前台的窗口句柄《/param》
/// 《returns》如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零《/returns》
[System.Runtime.InteropServices.DllImport(“User32.dll“)]
private static extern bool SetForegroundWindow(IntPtr hWnd); private const int SW_SHOWNOMAL = 1;
private static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, SW_SHOWNOMAL);//显示
SetForegroundWindow(instance.MainWindowHandle);//当到最前端
}
private static Process RuningInstance()
{
Process currentProcess = Process.GetCurrentProcess();
Process Processes = Process.GetProcessesByName(currentProcess.ProcessName);
foreach (Process process in Processes)
{
if (process.Id != currentProcess.Id)
{
if (System.Reflection.Assembly.GetExecutingAssembly().Location.Replace(“/“, “\\“) == currentProcess.MainModule.FileName)
{
return process;
}
}
}
return null;
}

/// 《summary》
/// 应用程序的主入口点。
/// 《/summary》
///

[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Process process = RuningInstance();
if (process == null)
{
Application.Run(new Form1());
}
else
{
// MessageBox.Show(“应用程序已经在运行中。。。“);
HandleRunningInstance(process);
//System.Threading.Thread.Sleep(1000);
//System.Environment.Exit(1);
} // Application.Run(new Form1());
}
}
}
-environment exit

C#点击button如何弹出里一个窗体


1、问题出在这个赋值语句上面:

Form1 myForm = new Form4(); 

myForm是Form1类型的变量,给它赋值一个Form4类型的实例,又没有相应类型转换操作,就会出现“无法隐式转换类的错误”。

改正的方法:

Form1 myForm = new Form1();

Form4 myForm = new Form4();

2、C#类型转换:

C#不同类型变量之间不充许直接赋值,但是可以通过类型转换来解决这一问题。

如字符串赋值给整型变量的类型转换: 
int num = int.Parse(“123“);  int num1 = Convert.ToInt32(“234“);

题中如果Form1和Form4是各自独立的类型,那么按上面改正即可。

特例是如果Form1是Form4的父类,这种情况可以通过强制类型转换来解决问题。

Form1 myForm = (Form1) new Form4();

扩展资料:

在 C# 中,可以执行以下几种类型的转换:

1、隐式转换:由于该转换是一种类型安全的转换,不会导致数据丢失,因此不需要任何特殊的语法。 示例包括从较小整数类型到较大整数类型的转换以及从派生类到基类的转换。

2、显式转换(强制转换):显式转换需要强制转换运算符。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时,必须进行强制转换。 典型的示例包括从数值到精度较低或范围较小的类型的转换和从基类实例到派生类的转换。-environment exit

3、用户定义的转换:可以定义一些特殊的方法来执行用户定义的转换,使不具有基类和派生类关系的自定义类型之间可以显式和隐式转换。 有关详细信息,请参阅转换运算符。

4、使用帮助程序类进行转换:若要在非兼容类型之间转换(例如整数和 System.DateTime 对象之间,或十六进制字符串和字节数组之间),可使用 System.BitConverter 类、System.Convert 类和内置数值类型的 Parse 方法(例如 Int32.Parse)。-environment exit

参考资料:

microsoft.Docs C#类型转换



C# 程序非正常关闭的情况下.


非正常关闭之后怎样呢? 你是要怎样的效果? 如果this.close();满足不了你,那么请用Application.Exit();如果还满足不了你那么请用:System.Environment.Exit(System.Environment.ExitCode); 如果这样还不行那就是你程序设计的不合理,没有加异常处理。思路调整一下再看。
-environment exit

C# 线程关闭程序结束所有线程


最好记录下你所有开启的线程,当结束的时候结束这些线程。这样还可以有机会比较优雅的结束线程。
一般来说 从入口函数main函数退出后进程就结束了。进程结束,默认的后台线程就结果了,所以将你的线程都标记为后台线程就可以了。
最后可以试试Environment.Exit吧。
-environment exit

C#关闭应用程序时如何关闭子线程(前台线程和后台线程)


后台线程不会使托管执行环境处于活动状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。例如,通过将 Thread.IsBackground 设置为 true,就可以将线程指定为后台线程。同样,通过将 IsBackground 设置为 false,就可以将线程指定为前台线程。从非托管代码进入托管执行环境的所有线程都被标记为后台线程。通过创建并启动新的 Thread 对象而生成的所有线程都是前台线程。如果要创建希望用来侦听某些活动(如套接字连接)的前台线程,则应将 Thread.IsBackground 设置为 true,以便进程可以终止。 一个线程或者是后台线程或者是前台线程。后台线程与前台线程类似,区别是后台线程不会阻止进程终止。
-environment exit

C# 中如何利用代码将运行的窗体关闭


private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show(“是否退出?“, “提示“, MessageBoxButtons.OKCancel) == DialogResult.OK)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
-environment exit

C#中关于Application.Exit()的疑问


  • Application.Exit只有在所有前台线程退出后才退出应用;换句话说,如果还有前台线程运行,则不会退出应用程序。

  • Environment.Exit则立即终止进程,相比之下Environment.Exit更狠些,有连锅端的意思。

如果程序是多线程的,其中有前台线程(即没有被显式设置IsBackground=true的线程),当调用Application.Exit方法后,由于前台线程还在运行,往往会造成Application.Exit失效。-environment exit