C#中的控制台应用程序会对其他应用程序产生奇怪的影响

C#中的控制台应用程序会对其他应用程序产生奇怪的影响,c#,console-application,C#,Console Application,你好,谢谢你的帮助。 我在这里遇到了一个奇怪的问题,我想听听你对此的建议、评论或想法。我的问题是我不能在我的开发计算机上重现这个问题 形势 我已经构建了一个控制台应用程序(用C#)。它工作得很好。现在其他人正在使用它。 在其中一个用户的计算机中,有另一个应用程序。在它看来,这是一个windows应用程序。我不知道它的代码,有人含糊其辞地告诉我“它是用C#构建的”。 该应用程序基本上是在一个窗口中进行初始化,关闭该窗口,然后出现一个带有按钮的登录窗口,两个文本框,其中一个是密码框。 向我报告(并归

你好,谢谢你的帮助。 我在这里遇到了一个奇怪的问题,我想听听你对此的建议、评论或想法。我的问题是我不能在我的开发计算机上重现这个问题

形势 我已经构建了一个控制台应用程序(用C#)。它工作得很好。现在其他人正在使用它。 在其中一个用户的计算机中,有另一个应用程序。在它看来,这是一个windows应用程序。我不知道它的代码,有人含糊其辞地告诉我“它是用C#构建的”。 该应用程序基本上是在一个窗口中进行初始化,关闭该窗口,然后出现一个带有按钮的登录窗口,两个文本框,其中一个是密码框。 向我报告(并归因于我的控制台应用程序)的问题是,当控制台应用程序正在运行且未最小化,然后启动另一个应用程序时,出现的登录窗口中没有第一个文本框。这意味着,如果我开始写什么都没有发生,我必须显式地选择要在其中写入的文本框。 当我的控制台应用程序最小化或未运行时,另一个应用程序将以第一个文本框为焦点启动(我可以简单地开始编写-无需选择文本框)

现在,我的控制台应用程序相当复杂,所以我构建了一个非常简单的控制台应用程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleFocus
{
    class Program
    {
        private static volatile bool keepRunning = true;

        static void Main(string[] args)
        {

            //We manage to set the way to finish this program with CTRL+C
            Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
            {
                e.Cancel = true; //execution continues after the delegate
                //we leave the whole program entirely

                keepRunning = false;
            };


            while(keepRunning)
            {
                Console.WriteLine("I am still here");
                Thread.Sleep(2000);
            }

            Console.WriteLine("Hit enter to finish...");
            Console.Read();

        }
    }
}
也是一个非常简单的windows应用程序。 我在另一个应用程序中尝试了两者的效果。 正如所料,即使是最简单的控制台应用程序也会导致其他应用程序失去焦点。同时,windows应用程序不会导致任何问题

因此,似乎在某种程度上,捕获ctrl-c以完成的控制台应用程序会干扰此应用程序。(我已经构建了自己的应用程序,但这种情况根本没有发生)

你知道为什么会这样吗


提前感谢

对这一问题的解决非常感兴趣;我想推测控制台是一个静态类,因此可能会附加多个事件(即,所有侦听CTRL-C的控制台应用程序都将在其中一个触发时退出),但我相当确定控制台不会在多个应用程序之间共享。我无法在Windows 10上重现这一点。运行控制台应用程序时,如果winforms应用程序的焦点出现问题,是否可以发布该应用程序的日志?并且.NET运行时不会在进程之间的数据级别上共享,因此控制台应用程序所做的任何事都不应干扰winforms应用程序,至少不会订阅静态事件。基本上,如果您可以显示绝对基本的控制台应用程序的行为,那么您应该将错误报告返回给winforms应用程序的开发人员,因为他们应该实现稳定的焦点增益,而不是依赖于某些不稳定的默认行为。如果您无法用标准winforms或wpf逻辑复制它,则可以(取决于有问题的程序在使用什么),那么你很可能应该把问题推给其他开发人员。你的程序是bug的催化剂这一事实并不意味着你的程序有bug。