【发布时间】:2013-09-20 15:29:53
【问题描述】:
我正在尝试构建一个“加载器”- 意思是,当我运行它时会启动一些预定义程序的程序。 问题是我不希望启动的程序中断我的工作流程,并且每个程序都有 0-2 秒的“挂起”。
If showLog = True Then Console.WriteLine("Starting --->" + "Skype")
proc.StartInfo.FileName = "C:\Program Files (x86)\Skype\Phone\Skype.exe"
proc.StartInfo.Arguments = "/nosplash /minimized"
proc.Start()
proc.PriorityClass = ProcessPriorityClass.BelowNormal
我认为我可能能够以“空闲”或“BelowNormal”优先级启动该过程。 但我只能在程序加载之后设置该优先级 - 这为时已晚。
有什么想法吗?
请注意,一切正常,但问题在于“冻结”持续时间太短 - 当加载的程序过多时,这会变得很重要。
谢谢。
【问题讨论】:
-
我认为在 .NET 中使用浮出水面的 API 是不可能的。您需要在 CreateProcess 上 P/Invoke 并启动暂停的进程。然后在恢复之前设置其优先级。
-
当您单步调试调试器时,它会挂在哪一行?另外,为什么需要设置优先级?他们是evil don't ya know? ;)
-
您的意思是您的 GUI 冻结了吗?你试过线程吗?
-
如何创建一个Task 并在其中启动您的流程? c#示例:
Task.Run(() =>{ /*your code to start a process*/ }); -
哈,一直都知道不要相信优先级 :) 是的,我的意思是 GUI 会在短时间内冻结。我对 .net 中的任务不太熟悉,但为什么要防止 GUI 冻结呢?当程序结束时它不会杀死任务吗?我将尝试深入研究关于启动进程暂停的第一个建议。
标签: c# .net vb.net process thread-priority