尝试 2。尽量保持清晰,因为我从事这项任务的时间比我应该做的要长得多,而且进展甚微。
我需要为应用程序制作进度条。现在,一切都发生在一个 UI 线程中,所有处理等等,所以当我在单击一个按钮后执行长时间运行的过程时,程序挂起大约 40 秒,然后恢复输出(我无法更改部分,申请是给我的)。而且我还必须做一个取消按钮,所以如果在中间过程中被击中,在该过程完成后,它会检查取消标志,如果它是ON,则打破所有方法并返回初始位置.
我要做的是为这个过程制作一个进度条。其中两个,一个用于中间过程,一个用于总过程。中间是一个小动作,像DB调用,输出中间过程(for和foreach循环)。
我尝试将这些条放在同一个 UI 窗口中,并在我继续进行时在同一个线程中更新它们(找到要点,从那里开始进度条并根据我的判断增加它们。和循环)。那只是更多地加载 UI,但它正在工作(不连贯的进度条移动)。
然后我尝试使用后台工作人员。同样的,将条形图放在 UI 中并通过后台工作程序运行它们。问题在于,即使 BG 工作程序运行,刷新也必须发生在 UI 窗口中,该窗口正忙于处理贪婪请求,所以当我想要它时它不会更新。
我尝试在核心使用多线程(无 BG 工作线程)并在新线程中创建一个新表单以反映进度,但我被警告不要这样做(同时运行 2 个 UI 线程)并且我遇到了麻烦传递周围的价值观。更不用说如果使用线程方法,如果不完全使 CPU 过载(让另一个线程在一段时间内运行(true)并在您从某个点调用 updateMethod 时进行更新),就不可能获得正在发生的进度的准确表示。过程)
我还有其他选择吗?因为最不负面的方面是我在执行程序时更新进度条的第一个方面。