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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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#_Multithreading_.net 4.0_Console Application - Fatal编程技术网

C# 控制台应用程序内部的跨线程调用(从另一个线程关闭控制台)

C# 控制台应用程序内部的跨线程调用(从另一个线程关闭控制台),c#,multithreading,.net-4.0,console-application,C#,Multithreading,.net 4.0,Console Application,我在线程中有一个Notify图标,该图标有一个带有“Close”选项的contextMenu,但我无法从那里关闭控制台 使用此代码仅关闭Notify图标,而不关闭控制台: public void mnuExit_Click(object sender, EventArgs e) { notificationIcon.Dispose(); notifyThread.Abort(); timerThread.Abort();

我在线程中有一个Notify图标,该图标有一个带有“Close”选项的contextMenu,但我无法从那里关闭控制台

使用此代码仅关闭Notify图标,而不关闭控制台:

    public void mnuExit_Click(object sender, EventArgs e)
    {
        notificationIcon.Dispose();
        notifyThread.Abort();
        timerThread.Abort();
        Application.Exit();
    }
我尝试过这个,但是控制台中没有“调用”

        this.Invoke((Action)delegate 
        {
            Application.Exit();
        });
编辑 我正在使用线程在系统托盘中创建notifyIcon,因为这是唯一的方法,没有其他方法。 notifyIcon有一个名为“退出”的选项。 Exit event方法只关闭notifyIcon,但我也想关闭Console窗口

即使我只是让
应用程序退出()
mnuExit\u单击
,只有notify图标关闭

My program.cs具有以下代码行以保持控制台打开:

System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

也许这就是问题所在。。。不确定。(但我需要这个)

为什么不尝试定义自己的事件呢。您可以在主线程中订阅它,当它被触发时,您可以在事件处理程序中关闭应用程序,为什么不尝试定义自己的事件呢。您可以在主线程中订阅它,当它被触发时,您可以在事件处理程序中关闭应用程序

您是否在应用程序中创建任何表单?如何打开控制台/表单?(Application.Exit照它说的做,因此当应用程序退出时,应用程序的systray图标自然会消失。您真正想要的是只关闭窗体/控制台,而不是关闭整个应用程序-因此您应该保留一些对控制台/窗体的对象引用,以便能够在不退出应用程序的情况下关闭它。)Application.Exit()只能执行某些操作以退出线程,它不会关闭控制台窗口。Exit()是一个更大的锤子。它只是一个控制台窗口,带有一个带有上下文菜单的notify图标。上下文菜单项“退出”应该关闭所有内容。@HansPassant我只是尝试使用
Environment.exit(0)但同样的情况也会发生,只显示图标,但控制台仍然打开。您是否在应用程序中创建表单?如何打开控制台/表单?(Application.Exit照它说的做,因此当应用程序退出时,应用程序的systray图标自然会消失。您真正想要的是只关闭窗体/控制台,而不是关闭整个应用程序-因此您应该保留一些对控制台/窗体的对象引用,以便能够在不退出应用程序的情况下关闭它。)Application.Exit()只能执行某些操作以退出线程,它不会关闭控制台窗口。Exit()是一个更大的锤子。它只是一个控制台窗口,带有一个带有上下文菜单的notify图标。上下文菜单项“退出”应该关闭所有内容。@HansPassant我只是尝试使用
Environment.exit(0)但同样的情况也会发生,只显示图标,但控制台仍然打开。