我有一个C# WindowsForm应用程序,它可以读取CSV文件并过滤掉文件中出现的任何“错误”。然后,应用程序允许用户通过特定过滤器(即,过滤错误后,将显示表单。然而,这需要几秒钟。在此期间,我想显示一个启动/加载屏幕,以显示应用程序正在加载。
我已经创建了一个显示启动屏幕的线程,但是,下面显示的代码中抛出了以下错误。
System.ComponentModel. InvalidAssynchronousStateException:'调用方法时出错。目标线程不再存在。
private void UpdateLabel(object sender, ElapsedEventArgs e)
{
if (Thread.CurrentThread.IsAlive)
{
if (lblLoading.InvokeRequired)
{
if (count == 0)
{
lblLoading.Invoke(new Action(() => lblLoading.Text = "Loading."));
count++;
}
else if (count == 1)
{
lblLoading.Invoke(new Action(() => lblLoading.Text = "Loading.."));
count++;
}
else if (count == 2)
{
lblLoading.Invoke(new Action(() => lblLoading.Text = "Loading..."));
count++;
}
else
{
lblLoading.Invoke(new Action(() => lblLoading.Text = "Loading"));
count = 0;
}
}
else
{
if (count == 0)
{
lblLoading.Text = "Loading.";
count++;
}
else if (count == 1)
{
lblLoading.Text = "Loading..";
count++;
}
else if (count == 2)
{
lblLoading.Text = "Loading...";
count++;
}
else
{
lblLoading.Text = "Loading";
count = 0;
}
}
}
}
即使在更新标签之前,启动屏幕也会在错误检查之前关闭。
谢谢nozzy
2条答案
按热度按时间icnyk63a1#
在Winform代码中使用backgroundWorker将类似于:
打开按钮单击:
wqnecbli2#
下面是@Sir Rufo提到的IProgress的基本示例。
使用.NET Core 7编码没有异常处理,你需要添加它,尤其是在处理文件时。
执行工作的模型,在本例中是任务。延迟将被你的工作所取代。
MainForm在Showed事件中显示一个辅助窗体,您可以随时更改为Load事件。
Splash表单,注意ReportProgress更新进度条,也可以是标签。此外,有一个取消按钮,如果你可能不想要。