先来看一段代码,是控制台应用程序
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窗口正常弹出文章来源:https://www.toymoban.com/news/detail-477452.html
以上就是今天遇到的问题。原因未知,且不能理解。
猜测与Form底层代码有关。但是没有深入研究。如果那位大神知道原因,望不吝赐教。文章来源地址https://www.toymoban.com/news/detail-477452.html
到了这里,关于Net6中遇到的一个很奇葩的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!