Net6中遇到的一个很奇葩的问题

这篇具有很好参考价值的文章主要介绍了Net6中遇到的一个很奇葩的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先来看一段代码,是控制台应用程序

    internal class Program
    {
        static void Main(string[] args)
        {
            Test().Wait();
        }

        private static async Task Test()
        {
            await Task.Run(() =>
            {
                Debug.WriteLine("线程内输出");
            });
            Debug.WriteLine("线程外输出");
        }
    }

执行,然后在输出窗口得到

线程内输出
线程外输出

没毛病吧。

再来看第二段代码,是winform应用程序

    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Test().Wait();
            var form = new Form1();
            Test().Wait();
            Application.Run(form);
            Test().Wait();
        }

        private static async Task Test()
        {
            await Task.Run(() =>
            {
                Debug.WriteLine("线程内输出");
            });
            Debug.WriteLine("线程外输出");
        }
    }

其中Form1为新建的窗体类。除了VS自己生成的代码以外,我一个字符都没改。
执行,然后在输出窗口得到

线程内输出
线程外输出
线程内输出

并且,Form1窗口也没有正常弹出。
显然在第二次调用Test()的时候,卡住Task线程里,出不来了。
这时候,我们对代码做一下修改。改为

    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Test().Wait();
            var form = new Form1();
            Test().Wait();
            Application.Run(form);
            Test().Wait();
        }

        private static async Task Test()
        {
            Task.Run(() =>
            {
                Debug.WriteLine("线程内输出");
            }).Wait();
            Debug.WriteLine("线程外输出");
        }
    }

执行,然后在输出窗口得到

线程内输出
线程外输出
线程内输出
线程外输出
线程内输出
线程外输出

且,Form1窗口正常弹出

以上就是今天遇到的问题。原因未知,且不能理解。
猜测与Form底层代码有关。但是没有深入研究。如果那位大神知道原因,望不吝赐教。文章来源地址https://www.toymoban.com/news/detail-477452.html

到了这里,关于Net6中遇到的一个很奇葩的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于.NET6后端程序(api)部署ssl证书的问题(https) 解决ing

    首先 一般情况下,后端不用https,但vs默认创建工程时,很容易勾选,这是需要将https改为http 改两处 一、把program.cs的 //app.UseHttpsRedirection(); 注释了 二、launchSettings里的iisSettings中 443改为0 再加一处 launchSettings的\\\"applicationUrl\\\": \\\"http://localhost:5001\\\"需要把s删掉 如果不改 用post会默认

    2024年01月17日
    浏览(59)
  • WPF:.Net6框架下,使用Material Design过程中,配色和UI字体模糊的问题

    有关Material Design的使用方法,请自行参考这个链接 WPF使用Material Design 下面,直接上我碰到的问题及解决方式 默认情况下,Material Design是提供了很多主题配色,但难免有些太过“出挑”,不适合工控软件的风格。 所以,下面简单介绍一下手动配色的基础方法: 代表采用的是

    2024年02月06日
    浏览(53)
  • 奇思妙想,用ChatGPT写代码怎么样呢?来看看写一个简单的Android apk

    这段时间重大新闻就属ChatGPT了,这到底是个什么呢?官方解释 ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其

    2023年04月25日
    浏览(40)
  • 部署U-net过程中遇到的问题

    在pycharm中打开U-net的代码包,运行报错:AttributeError: module ‘wandb’ has no attribute ‘init’ 解决办法:因为运行环境是conda pycharm01 首先激活环境,然后安装wandb pip3 install wandb 然后遇到第二个问题: 之前查错挂了梯子,然后我把梯子退出,问题解决。 问题3: 解决办法: 将ba

    2024年02月14日
    浏览(47)
  • 安装IIS及搭建asp.net程序遇到的问题

    一、安装IIS 在服务器管理中选择IIS,右键选择添加角色和功能 在服务器角色中,应用程序开发中要选择ASP.NET3.5、ASP.NET4.6功能。 单击下一步执行安装即可。 二、常见问题 问题1. HTTP 错误404.17 - Not Found 解决方法: 出现以上问题没有安装ASP.NET4.6功能,勾选安装即可。 安装后再

    2024年01月25日
    浏览(40)
  • .Net 6 SignalR 实际业务开发中遇到的问题及解决办法

    1.websocket即时通讯协议 2.Server-Sent Events(SSE)服务器事件 3.longpolling 长轮询。 如果客户端开启协商,会按顺序选择可兼容的协议。(默认开启协议协商) 如果客户端禁用协商,只能websocket协议。 客户端未禁用协商 1.客户端向服务器发http请求,询问服务器支持什么协议。 服务

    2024年02月10日
    浏览(32)
  • 聊聊哪些奇葩的代码规范 —— 代码放一行

    因为有些要求感觉实是太过奇葩,收集下来娱乐下大家。 要求代码必须要放在一行上面,导致代码上面有不少行甚至超过了 1000 个字符。 规范解读 就是有时候代码过长,我们会折行增加可读性,最简单的一个例子就是 object builder 设置值。奇葩的要求是这个代码必须要放在一

    2024年02月08日
    浏览(43)
  • .NET 导入导出Project(mpp)以及发布后遇到的Com组件问题

    最近公司项目有一个对Project导入导出的操作,现在市面上能同时对Project进行导入导出的除了微软自带的 Microsoft.Office.Interop.MSProject ,还有就是 Aspose.Tasks for .NET。 但因为后者是收费软件且破解版的现阶段只到18.11,只支持.net Framework,而我们的项目是用的netcore,在对Aspose.Ta

    2024年02月10日
    浏览(36)
  • 遇到了一个跨域问题

    我的前端运行时 所在的端口是  localhost:7000, 后端所在的端口是 localhost:8080 我想 在前端像后端发送请求,获取数据。但是浏览器报错,因为不同源。 因此,解决方案如下: 在 Vue.js 应用程序中,你可以使用代理(Proxy)来解决跨域问题。代理允许你将请求发送到另一个域名

    2024年02月08日
    浏览(31)
  • mysql奇葩问题union

    单独执行第一条,有三条结果; union之后,只有一条结果; union自动的把重复数据合并了;

    2024年04月29日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包