超时关闭在控制台中无法关闭启动画面
Close with timeout is not working in Console to close splashscreen
我做了一个class,我做了一个实例。在上述实例中,我有这些代码行来显示和关闭启动画面。
// Open (show)
public void ShowSplashScreen(bool autoClose = false)
{
splashscreen.Show(autoClose, true);
}
// Close (don't show)
public void CloseSplashScreen()
{
splashscreen.Close(TimeSpan.FromSeconds(0.3));
}
它显示正常,但从不关闭,只是停留在那里。
这是启动画面关闭的文档:https://docs.microsoft.com/en-us/dotnet/api/system.windows.splashscreen.close?view=netframework-4.8
[System.Security.SecurityCritical]
public void Close (TimeSpan fadeoutDuration);
注意:我使用的是show
方法,参数AutoClose
设置为false
,TopMost
设置为true
,这样就可以了不会自动关闭,因为我想以编程方式关闭它并且不订阅现有事件。
我是 运行 来自控制台(.NET 框架)应用程序的代码行,用于测试目的,然后再将其完全实施到我的 UI 中。
我尝试过的:
在调用 close
.
之前调试甚至尝试再次调用 show
class 肯定有问题,因为调用 class 并直接操作 属性 有效:
ClassSplashScreen rss = new ClassSplashScreen();
rss.splashscreen.Show(false);
rss.splashscreen.Close(TimeSpan.FromSeconds(1));
我最好的猜测是什么东西挂在 UI 上并冻结了?但是我不确定该怎么办。
用于运行测试的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace NamespaceName
{
public class WhosebugCode
{
static void Main(string[] args)
{
ClassSplashScreen screen = new ClassSplashScreen();
screen.ShowSplashScreen();
screen.CloseSplashScreen();
}
}
public class ClassSplashScreen
{
public SplashScreen splashscreen { get; set; }
public ClassSplashScreen()
{
splashscreen = new SplashScreen("Resource Image Link");
}
public void ChangeSplashResource(SplashScreen resource)
{
splashscreen = resource;
}
public void ShowSplashScreen(bool autoClose = false)
{
splashscreen.Show(autoClose, true);
}
public void CloseSplashScreen()
{
splashscreen.Close(TimeSpan.FromSeconds(1));
}
}
}
SplashScreen
依赖调度程序,但默认情况下控制台应用程序中没有调度程序。如果您创建 System.Windows.Application
,它应该按预期工作:
public class WhosebugCode
{
[STAThread]
static void Main(string[] args)
{
Application app = new Application();
app.Startup += (s, e) =>
{
ClassSplashScreen screen = new ClassSplashScreen();
screen.ShowSplashScreen();
screen.CloseSplashScreen();
};
app.Run();
}
}
public class ClassSplashScreen
{
private readonly SplashScreen splashscreen;
public ClassSplashScreen() => splashscreen = new SplashScreen("Resource Image Link");
public void ShowSplashScreen() => splashscreen.Show(false);
public void CloseSplashScreen() => splashscreen.Close(TimeSpan.FromSeconds(1));
}
我做了一个class,我做了一个实例。在上述实例中,我有这些代码行来显示和关闭启动画面。
// Open (show)
public void ShowSplashScreen(bool autoClose = false)
{
splashscreen.Show(autoClose, true);
}
// Close (don't show)
public void CloseSplashScreen()
{
splashscreen.Close(TimeSpan.FromSeconds(0.3));
}
它显示正常,但从不关闭,只是停留在那里。
这是启动画面关闭的文档:https://docs.microsoft.com/en-us/dotnet/api/system.windows.splashscreen.close?view=netframework-4.8
[System.Security.SecurityCritical]
public void Close (TimeSpan fadeoutDuration);
注意:我使用的是show
方法,参数AutoClose
设置为false
,TopMost
设置为true
,这样就可以了不会自动关闭,因为我想以编程方式关闭它并且不订阅现有事件。
我是 运行 来自控制台(.NET 框架)应用程序的代码行,用于测试目的,然后再将其完全实施到我的 UI 中。
我尝试过的:
在调用 close
.
show
class 肯定有问题,因为调用 class 并直接操作 属性 有效:
ClassSplashScreen rss = new ClassSplashScreen();
rss.splashscreen.Show(false);
rss.splashscreen.Close(TimeSpan.FromSeconds(1));
我最好的猜测是什么东西挂在 UI 上并冻结了?但是我不确定该怎么办。
用于运行测试的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace NamespaceName
{
public class WhosebugCode
{
static void Main(string[] args)
{
ClassSplashScreen screen = new ClassSplashScreen();
screen.ShowSplashScreen();
screen.CloseSplashScreen();
}
}
public class ClassSplashScreen
{
public SplashScreen splashscreen { get; set; }
public ClassSplashScreen()
{
splashscreen = new SplashScreen("Resource Image Link");
}
public void ChangeSplashResource(SplashScreen resource)
{
splashscreen = resource;
}
public void ShowSplashScreen(bool autoClose = false)
{
splashscreen.Show(autoClose, true);
}
public void CloseSplashScreen()
{
splashscreen.Close(TimeSpan.FromSeconds(1));
}
}
}
SplashScreen
依赖调度程序,但默认情况下控制台应用程序中没有调度程序。如果您创建 System.Windows.Application
,它应该按预期工作:
public class WhosebugCode
{
[STAThread]
static void Main(string[] args)
{
Application app = new Application();
app.Startup += (s, e) =>
{
ClassSplashScreen screen = new ClassSplashScreen();
screen.ShowSplashScreen();
screen.CloseSplashScreen();
};
app.Run();
}
}
public class ClassSplashScreen
{
private readonly SplashScreen splashscreen;
public ClassSplashScreen() => splashscreen = new SplashScreen("Resource Image Link");
public void ShowSplashScreen() => splashscreen.Show(false);
public void CloseSplashScreen() => splashscreen.Close(TimeSpan.FromSeconds(1));
}