gpt4 book ai didi

c# - 尝试在执行长进程时添加请等待弹出窗口,弹出显示,但进程从不运行

转载 作者:行者123 更新时间:2023-12-03 12:58:39 30 4
gpt4 key购买 nike

所以我有一个进程可以运行一些较大的文件,并希望添加一个“请稍候......处理......弹出窗口,以便知道它正在处理他们的任务。

我在 youtube C# Wait Form 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 没有反射(reflect)数据。

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

最佳答案

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

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

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

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

谢谢弗兰克的建议。

关于c# - 尝试在执行长进程时添加请等待弹出窗口,弹出显示,但进程从不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61067718/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com