我最糟糕的时间是围绕线程/后台进程。我的问题在某种程度上似乎很常见,但我还没有找到满足我需求的好例子。
经典的例子是这样的:
当某个长时间运行的任务/进程运行时,我的 UI 冻结 - 我希望至少能够移动/最小化 UI。
经典回复包括线程和任务工厂以及 BackgroundWorker 解决方案。但无论我如何实施它们,我都会得到糟糕的结果。
在我的程序中,我正在执行另一个应用程序并等待它完成。为了简单起见,假设我这样做:
Process p = Process.Start("notepad.exe somefile.txt");
p.WaitForExit();
//read somefile.txt
WaitForExit()
显然,我的应用程序 UI 在等待我关闭记事本时会挂起。
我已经尝试了一些建议的方法,但我被画在两个角落之一:
- 我的界面仍然挂起,然后在我关闭记事本时读取 somefile.txt 就好了。
- 进程(记事本)运行良好,但我的应用程序在我关闭记事本之前立即读取了 somefile.txt(所以我猜它是异步运行的)
我看到的大多数例子都涉及到一个很大的数字 - 简单但不是我正在做的事情。启动这个“外部”过程会使事情变得有点复杂。
感谢您的时间和考虑!!