【问题标题】:How to open a window in console application?如何在控制台应用程序中打开一个窗口?
【发布时间】:2017-05-15 07:18:43
【问题描述】:

我需要在应用程序中显示一个窗口,但它是控制台。

我尝试过使用:

Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

代码保持这样。

static void Main(string[] args)
        {


            _handler += new EventHandler(Handler);
            SetConsoleCtrlHandler(_handler, true);
            ConnectToServer();
            RequestLoop();   
             Application.EnableVisualStyles(); 
             Application.SetCompatibleTextRenderingDefault(false);
             Application.Run(new Form1());

        }

但是窗口没有打开,如果我把代码放在前面窗口打开了,但是控制台不执行命令。

static void Main(string[] args)
            {
                   Application.EnableVisualStyles(); 
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Form1());

                _handler += new EventHandler(Handler);
                SetConsoleCtrlHandler(_handler, true);
                ConnectToServer();
                RequestLoop();                      

            }

这两个代码都不起作用。

在第一个代码中,窗口没有打开。

在第二个代码中打开了窗口,但控制台不执行命令

【问题讨论】:

标签: c# forms console window


【解决方案1】:

问题是您在同一个线程中运行控制台和窗口。当您启动窗口时,因为线程与控制台相同,所以线程正在处理窗口而不是同时处理控制台。要同时运行控制台和窗口(在单独的线程中): 改变

Application.Run(new Form1());

Task.Run(() => Application.Run(new Form1()));

这将为您的 Window 设置另一个线程,并且控制台仍将进行处理。

【讨论】:

  • 它有效,我认为你是fogent Console.ReadLine();所以程序不会关闭。如果您的控制台线程关闭,那么您的窗口也将关闭:Task.Run(() => Application.Run(new Form1())); Console.ReadLine();
  • 窗口打不开
  • 请把你的项目发给我。
【解决方案2】:
Task.Run(() => Application.Run(new Form1()));

【讨论】:

  • 发生的事情是 RequestLoop() 之后的所有内容都没有被执行,因为它是一个无限循环。所以你当然必须在循环之前运行你的窗口。
【解决方案3】:

试试这个,你忘记了'Console.ReadLine();',如果它不是你的控制台应用程序将被关闭,你的窗口也会关闭。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Task.Run(() => Application.Run(new Form1()));
            Console.ReadLine();
        }
    }
}

【讨论】:

  • Put Task.Run(() => Application.Run(new Form1()));在你的 RequestLoop 之前,在一切之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2011-12-24
  • 1970-01-01
相关资源
最近更新 更多