所以我有一个进程,它用较大的文件运行一段时间,并希望添加一个"请等待……正在处理…"弹出窗口,以便知道它正在执行任务。
我在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方法。它现在似乎很有魅力。。
谢谢弗兰克的建议。