我有以下代码,我已经在. Net Framework 4.8中使用了很多年,用于在我的启动中显示闪屏:

      Thread newWindowThread = new Thread(new ThreadStart(() =>
      {
        WpfSplashScreen splash = new WpfSplashScreen();//Get stuck here!
        splash.Show();
        Thread.Sleep(3000);
        splash.Close();
      }));

      newWindowThread.SetApartmentState(ApartmentState.STA);
      newWindowThread.IsBackground = true;
      newWindowThread.Start();

      //Loading some things...
      Thread.Sleep(4000);

但是在将我的项目迁移到. net 8之后,它停止了像以前一样的工作.现在创建的新线程显示SplashScreen在对话框初始化时卡住了,只有在主线程完成后才继续,这导致我的SplashScreen只有在所有加载完成后才打开.

调试时,如果我进入'WpfSplashScreen()',我可以看到线程停止在'InitializeComponent()'方法.

我不想将SlpashScreen更改为另一个组件,这不是这里的 idea ,我已经使用相同的方法在我的程序的许多部分中打开它们自己的线程上的其他对话框,因为不同的原因(例如一个progressbar窗口),所有情况下迁移后都有相同的问题.SplashScreen是我关于这个问题的最简单的例子.因此,我真的需要知道如何使Wpf对话框初始化不挂起. Net 8中的单独线程.

有什么 idea 吗?

推荐答案

首先,感谢快速react !

我发现问题不在. Net 8中,问题是我的应用程序实际上是运行在Autocad中的插件,它的初始化是由Autocad初始化完成的.在最近发布的Autocad 2025版本中,他们可能对Autocad初始化进行了一些更改,以防止在Autocad初始化期间启动辅助线程.因此,我为显示SlpashScreen而制作的线程只有在主线程完成后才开始.

即便如此,我还是要再次感谢你,因为你让我明白,仅仅为了做这样简单的事情而开始一个新的线程并不是一个好主意.我将实现您给出的建议,以取代使用线程的方法.

Csharp相关问答推荐

更改对象的旋转方向

XUNIT是否使用测试数据的源生成器?

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

从ASP.NET Core中的枚举字段填充 Select 选项时,将默认的第一个选项添加为 Select 元素

从.Net 6 DLL注册和检索COM对象(Typelib导出:类型库未注册.(异常来自HRESULT:0x80131165))

如何注册类使用多级继承与接口

HttpRequestMessage.SetPolicyExecutionContext不会将上下文传递给策略

如何使用.NET6WPF打印车票?

如何在我的C#应用程序中设置带有reactjs前端的SignalR服务器?

异步任务调用程序集

为什么我不能从我的异步任务方法中返回异步任务方法?

在';、';附近有错误的语法.必须声明标量变量";@Checkin";.';

为什么我的用户界面对象移动到略低于实际目标?

我想根据姓氏按字母顺序对包含150行徽章编号、姓氏、名字、地址等的文件进行排序.e

FakeItEasy自动嘲弄内容

Visual Studio如何使用当前的框架?

反序列化我以前使用System.Text.Json序列化的文件时出现异常

在使用xUnit和Mock执行单元测试时,控制器ViewResult返回空的Model集合

我如何为我的Blazor应用程序构建一个动态教程标注?

如何获取我在SQL中输入的值