当执行一个长进程时,试图添加一个请等待弹出窗口,弹出窗口显示,但进程从未运行



所以我有一个进程,它用较大的文件运行一段时间,并希望添加一个"请等待……正在处理…"弹出窗口,以便知道它正在执行任务。

我在youtube上遵循了这个视频示例C#等待表格Tutuorial

与示例一样实现,但实际完成工作的方法从未运行

这是我的处理表单逻辑,当我运行整个应用程序时会显示它

public partial class Processing : Form
{
public Action Worker { get; set; }
public Processing(Action worker)
{            
InitializeComponent();
if(worker==null)
throw new ArgumentNullException();
Worker = worker;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
Task.Factory.StartNew(Worker).ContinueWith(t => { this.Close(); }, TaskScheduler.FromCurrentSynchronizationContext());
}
}

然后这就是我如何从我的按钮点击调用它

private void btnFilters_Click(object sender, EventArgs e)
{
using (Processing pc = new Processing(ParseFilteredData))
{
pc.ShowDialog(this);
}
//ParseFilteredData();
}

为什么我的ParseFilteredData正在执行,但没有更新我的主窗体?我逐步完成了代码,它执行了方法,但我的UI没有反映数据。

请记住,我的ParseFilteredData是有效的,如果你注释掉using语句,然后点击按钮运行该方法,几分钟后,我的所有列表框都会被填充。

因此,我对代码进行了一些更改,将所有数据源绑定从ParseFilteredData方法移到了它自己的方法中,因此ParseFiltered数据现在只构建数据表,这是耗时的部分。然后在Using语句之后,我调用我的新方法,所有内容都会填充并显示

private void btnFilters_Click(object sender, EventArgs e)
{
using (Processing pc = new Processing(ParseFilteredData))
{
pc.ShowDialog(this);
}
BindAllListBoxes();
}

我还将数据表移到了方法之外,只是填充它们,而不是同时初始化和填充所有数据表。这允许在该方法之外访问数据表。

因此,为了让我的代码按我的意愿工作,我必须拆分我的ParseFilteredData方法。它现在似乎很有魅力。。

谢谢弗兰克的建议。

最新更新