Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当主窗体关闭时,程序本身是否可能不关闭?_C#_Forms - Fatal编程技术网

C# 当主窗体关闭时,程序本身是否可能不关闭?

C# 当主窗体关闭时,程序本身是否可能不关闭?,c#,forms,C#,Forms,我知道在VB.NET中可以这样做,但在C#中我找不到。它将如何在此处执行此操作?您可以隐藏表单并在系统托盘中放置一个图标。覆盖关闭事件并隐藏它,然后在用户单击托盘图标时显示它 有关关闭事件以及如何取消关闭的详细信息:您可以隐藏表单并在系统托盘中放置图标。覆盖关闭事件并隐藏它,然后在用户单击托盘图标时显示它 有关关闭事件以及如何取消关闭的更多信息:启动一个新的线程来执行您的建议就足够了,但我不确定这是否能满足您的目标 编辑: 我建议的一个技术示例: using System; using Syst

我知道在VB.NET中可以这样做,但在C#中我找不到。它将如何在此处执行此操作?

您可以隐藏表单并在系统托盘中放置一个图标。覆盖关闭事件并隐藏它,然后在用户单击托盘图标时显示它


有关关闭事件以及如何取消关闭的详细信息:

您可以隐藏表单并在系统托盘中放置图标。覆盖关闭事件并隐藏它,然后在用户单击托盘图标时显示它


有关关闭事件以及如何取消关闭的更多信息:

启动一个新的
线程来执行您的建议就足够了,但我不确定这是否能满足您的目标

编辑:

我建议的一个技术示例:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace HangApp
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            Runner r = new Runner();
        }

        class Runner
        {
            internal Runner()
            {
                _start = DateTime.Now;
                Thread t = new Thread(ThreadStart);
                t.Start();
            }
            DateTime _start;
            void ThreadStart()
            {
                while (true)
                {
                    //  some stuff to do
                    if (ExitConditionMet())
                    {
                        break;
                    }
                }
            }

            bool ExitConditionMet()
            {
                //  will run the app for 5 seconds after main form was closed
                return (DateTime.Now - _start).TotalSeconds > 5;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Windows.Forms;
使用系统线程;
名称空间应用程序
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
流道r=新流道();
}
班长
{
内流道()
{
_start=DateTime.Now;
螺纹t=新螺纹(螺纹起点);
t、 Start();
}
开始日期时间;
void ThreadStart()
{
while(true)
{
//有些事要做
如果(ExitConditionMet())
{
打破
}
}
}
bool ExitConditionMet()
{
//将在主窗体关闭后运行应用程序5秒
返回(DateTime.Now-_start).TotalSeconds>5;
}
}
}
}
顺便说一句,上面的代码只是一个演示,不应该:

  • 在一个紧密的环中做一个什么都不做的线程
  • 在类构造函数中执行线程启动

只要启动一个新的
线程来执行您的建议就足够了,但我不确定这是否能满足您的目标

编辑:

我建议的一个技术示例:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace HangApp
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            Runner r = new Runner();
        }

        class Runner
        {
            internal Runner()
            {
                _start = DateTime.Now;
                Thread t = new Thread(ThreadStart);
                t.Start();
            }
            DateTime _start;
            void ThreadStart()
            {
                while (true)
                {
                    //  some stuff to do
                    if (ExitConditionMet())
                    {
                        break;
                    }
                }
            }

            bool ExitConditionMet()
            {
                //  will run the app for 5 seconds after main form was closed
                return (DateTime.Now - _start).TotalSeconds > 5;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Windows.Forms;
使用系统线程;
名称空间应用程序
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
流道r=新流道();
}
班长
{
内流道()
{
_start=DateTime.Now;
螺纹t=新螺纹(螺纹起点);
t、 Start();
}
开始日期时间;
void ThreadStart()
{
while(true)
{
//有些事要做
如果(ExitConditionMet())
{
打破
}
}
}
bool ExitConditionMet()
{
//将在主窗体关闭后运行应用程序5秒
返回(DateTime.Now-_start).TotalSeconds>5;
}
}
}
}
顺便说一句,上面的代码只是一个演示,不应该:

  • 在一个紧密的环中做一个什么都不做的线程
  • 在类构造函数中执行线程启动

您可以将
program.cs
中的
Main
例程(程序的入口点)(默认情况下)更改为使用而不是
Application.Run(Form)


或者,您可以指定自己的
ApplicationContext
并重写,以提供与自动关闭不同的行为。

您可以更改
program.cs
中的
Main
例程(程序的入口点)(默认情况下)以代替
Application.Run(Form)


或者,您可以指定自己的
ApplicationContext
并重写,以提供与自动关闭不同的行为。

您是如何在VB.NET中执行此操作的?大多数情况下,有一个与C#…@Cameron的直接通信,这是应用程序选项卡中的一个设置。不管怎样,这就是我的朋友(他非常擅长VB.NET)说的。@Minicl55:他是刚刚告诉你还是也给你看了。@Cameron他是这么说的。但是他制作了一个和我正在制作的程序完全一样的程序,他说他就是这样做的。可能是你在VB.NET中做的吗?大多数情况下,有一个与C#…@Cameron的直接通信,这是应用程序选项卡中的一个设置。不管怎样,这就是我的朋友(他非常擅长VB.NET)说的。@Minicl55:他是刚刚告诉你还是也给你看了。@Cameron他是这么说的。但他制作了一个与我正在制作的程序完全相同的程序,他说他就是这样做的。@Minicl55重写ApplicationContext的可能副本可以让你做任何你想做的事情。或者,您可以只让主窗体存在,但在次窗体使其可见之前保持隐藏…@Minicl55用自己的重写ApplicationContext可以让您做任何您想做的事情。或者,你可以只让主表单存在,但在你的次表单使其可见之前保持隐藏…在问题标题的当前形式中,它们是对它的直接回答。不,它实际上也不回答这个问题。“真的吗?”minitech我想建议是把你的逻辑转换成se