【问题标题】:Enable button clicking while another process is running在另一个进程正在运行时启用按钮单击
【发布时间】:2013-08-28 18:07:33
【问题描述】:

我通过谷歌搜索了一下,但无法正常工作。

当我按下按钮时,我已经完成了一些过程。

我想添加一个“全部杀死”按钮来在按下时终止所有操作,但是当我开始一个进程时,我无法按下任何其他按钮,直到它完成。

private void button_checkZero_phones_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(new ThreadStart(WorkThreadFunction));
        thread.Start();
    }

private void button_kill_all_Click(object sender, EventArgs e)
    {
        System.Environment.Exit(1);
    }

【问题讨论】:

  • 听起来你正在 UI 线程上进行处理,这将锁定应用程序,直到进程完成。保持 UI 响应的唯一方法是在另一个线程上进行处理
  • 我们调度器把东西放在同一个线程上..
  • 请提供一些代码,从哪里开始处理
  • 你能发布你的代码来展示你如何开始你的流程吗?

标签: c# button


【解决方案1】:

您必须在异步方法中运行“全部杀死”方法。当你运行一个长进程时,主线程总是被阻塞。

有关您的问题的更多信息: WinForm Application UI Hangs during Long-Running Operation

只需使用以下方法之一 - 运行 Kill All in:

  1. 一个BackgroundWorker
  2. 另一个线程
  3. 另一个任务
  4. 使用异步/等待
  5. 反应式扩展

有几种方法可以通知您所有进程都已终止!这取决于您使用哪种方法。

【讨论】:

  • 我现在有另一个问题,worker 像一个查询一样工作,当我按下按钮一次它运行一次,但当我再次按下它时它运行两次
  • 按钮点击时禁用!
  • orfouce 我做了,但是在这个过程完成后我再次启用它......如果我再次按下按钮它会完成 2 次工作,超过 3 次......
  • 张贴你说你要使用backgraound worker的代码你必须在使用后废弃它:stackoverflow.com/questions/2542326/…
【解决方案2】:
【解决方案3】:

这是一个 Windows 应用程序吗?如果您感觉老派并喜欢结束其他开发人员,请在您的死亡循环中添加Application.DoEvents()

你知道你想要。

如果您想在不被所有同行嘲笑的情况下这样做,请参阅this question and answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多