仰望—星空 2023-03-18 11:52 采纳率: 63.6%
浏览 43

C# winform程序 使用控制台输出无结果?

C# winform程序 使用控制台输出无结果?

Program代码如下:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
    internal static class Program
    {

        public delegate int NumberAdd(int a, int b);
        /// 
        /// 启动控制台
        /// 
        /// <returns></returns>
        [DllImport("kernel32.dll")]
        public static extern Boolean AllocConsole();

        /// 
        /// 释放控制台
        /// 
        /// <returns></returns>
        [DllImport("kernel32.dll")]
        public static extern Boolean FreeConsole();

        /// 
        /// 应用程序的主入口点。
        /// 
        /// 
        [STAThread]
   
        static void Main(string[] args)
        {
            AllocConsole();//调用系统API,调用控制台窗口
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new WindowsFormsApp1.Form1());
            Console.WriteLine("Hello World!");
            Console.ReadKey();
            FreeConsole();
        }
    }

运行结果如下:

img

没有 FrmMain 类?

别人代码里是这样写的:

Application.Run(new FrmMain());

我找不到FrmMain这个类,所以写的项目自动生成的窗口类。

不支持Action.BeginInvoke(null, null)的委托异步调用方法?

最近在学异步编程,使用 IAsyncResult iAsyncResult = numberAdd.BeginInvoke(2, 5, null, null); 时程序就报错此平台不支持操作,试了一下发现只有..net framework可以运行,而.net winform程序同样报错。想问问以后开发程序也报错怎么办?

img

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-18 14:07
    关注
    评论
  • MarkHan_ 2023-03-18 12:02
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    关于C# winform程序使用控制台输出无结果的问题,可以尝试在程序运行时调用AllocConsole函数创建控制台窗口,并在需要输出信息的地方使用Console.WriteLine函数进行输出。在代码中,你已经正确地调用了AllocConsole函数并使用Console.WriteLine函数输出了信息,但是由于程序使用了Application.Run函数开启了一个GUI窗口,因此在GUI窗口关闭之前,控制台窗口不会显示任何内容。
    ·
    如果想在程序运行时同时使用GUI窗口和控制台窗口输出信息,可以在GUI窗口关闭之前先关闭控制台窗口,然后再关闭GUI窗口。具体来说,可以在Application.Run函数之前调用AllocConsole函数创建控制台窗口,在Application.Run函数之后使用Console.WriteLine函数输出信息,最后在关闭GUI窗口之前调用FreeConsole函数关闭控制台窗口,代码如下:

    static void Main(string[] args)
    {
        AllocConsole();//调用系统API,调用控制台窗口
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Form mainForm = new WindowsFormsApp1.Form1();
        Application.Run(mainForm);
        Console.WriteLine("Hello World!");
        Console.ReadKey();
        FreeConsole();
    }
    
    

    关于不支持Action.BeginInvoke(null, null)的委托异步调用方法的问题,这是因为Action.BeginInvoke方法是在.NET Framework中引入的,而在.NET Core和.NET 5及更高版本中已被弃用。如果在使用异步编程时需要进行委托的异步调用,可以使用.NET Core和.NET 5及更高版本中提供的Task.Run方法或Task.Factory.StartNew方法代替,代码如下:

    Task<int> task = Task.Run(() => numberAdd(2, 5));
    int result = await task;
    
    

    在代码中,Task.Run方法会将委托作为参数传入,返回一个Task对象,然后使用await关键字等待异步操作完成并获取结果。需要注意的是,如果委托中包含的方法有返回值,可以将其改为Func类型的委托,并在使用Task.Run方法时将其作为参数传入。

    评论
  • threenewbee 2023-03-18 13:35
    关注

    Console.WriteLine("Hello World!");
    这不是你程序中创建的那个控制台

    其实你不必调用api,只要把你的项目属性里编译目标设置为控制台即可
    或者也可以说,你新建一个控制台类型的程序,用 new Form().Show() 一样可以加载 GUI

    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日

悬赏问题

  • ¥15 有人会思科模拟器嘛?
  • ¥30 遇到一个的问题,请教各位
  • ¥20 matlab报错,vflux计算潜流通量
  • ¥15 我该如何实现鼠标按下GUI按钮时就执行按钮里面的操作的方法
  • ¥15 关于#硬件工程#的问题:我这边有个锁相环电路没有效果
  • ¥15 20款 27寸imac苹果一体机装win10后,蓝牙耳机和音响放歌曲卡顿断断续续.
  • ¥15 求解icon library .icl图标库文件
  • ¥15 VB.NET 父窗体调取子窗体报错
  • ¥15 python海龟作图如何改代码使其最后画出来的是一个镜像翻转的图形
  • ¥15 我不明白为什么c#微软的官方api浏览器为什么不支持函数说明的检索,有支持检索函数说明的工具吗?