gpt4 book ai didi

c# - 单击按钮取消进程

转载 作者:行者123 更新时间:2023-12-05 01:48:39 24 4
gpt4 key购买 nike

我写的项目中有一个流程。这需要时间,我想使用进度条。我想允许用户通过单击按钮取消进程和 ProgressBar。我不希望用户在我的进程运行时能够单击该窗体上的任何其他控件。如果我使用线程,则用户可以单击窗体上的其他控件。

也许一种解决方案是使用另一种形式,并在第二种形式上设置 ProgressBar 和取消按钮。但是如何根据我的进程设置 ProgressBar 的值,该进程以 first 形式参与。

解决方案是什么?

提前致谢。

最佳答案

这最好通过对话框来完成,它会自动使您的 UI 的其余部分无法访问。向您的项目添加一个新窗体,并在其上放置一个 ProgressBar 和一个 Button。并添加一个公共(public)方法,以便您可以从主窗体中的事件处理程序更新进度条:

public partial class ProgressDialog : Form {
public ProgressDialog() {
InitializeComponent();
}
public void ShowProgress(int progress) {
progressBar1.Value = progress;
}
private void CancelProcess_Click(object sender, EventArgs e) {
this.DialogResult = DialogResult.Cancel;
}
}

启动 worker 时需要显示对话框:

    ProgressDialog dlg;

private void RunProcess_Click(object sender, EventArgs e) {
backgroundWorker1.RunWorkerAsync();
using (dlg = new ProgressDialog()) {
dlg.ShowDialog(this);
}
dlg = null;
if (backgroundWorker1.IsBusy) backgroundWorker1.CancelAsync();
}

请注意它如何调用 CancelAsync() 来停止 worker,因此关闭对话框足以让它停止。您需要更新进度条:

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) {
dlg.ShowProgress(e.ProgressPercentage);
}

并且您需要在工作人员完成并且用户自己没有关闭对话框时自动关闭对话框:

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
if (dlg != null) dlg.Close();
}

关于c# - 单击按钮取消进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8757775/

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