-1
我正在使用此過程來執行Comandline。我在網上找到了這段代碼,除了一些細節外,它工作正常。我在一些論壇上看過不要使用ProcessMessages
並將其放入一個線程中。在Delphi中沒有響應,請避免ProcessMessages並使用線程
當我刪除了Application.ProcessMessages
線,那麼它停止工作。 然後,如果我保留它,而它正在執行,我得到"Not responding"
。你能幫我在這種情況下使用線程嗎?
procedure ExecAndWait(const CommandLine: string);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), 0);
StartupInfo.cb := SizeOf(TStartupInfo);
StartupInfo.wShowWindow := SW_HIDE;
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
//UniqueString(CommandLine);
if CreateProcess(nil, PChar(CommandLine), nil, nil, False,
0, nil, nil, StartupInfo, ProcessInfo) then
begin
while WaitForSingleObject(ProcessInfo.hProcess, 10) > 0 do
Application.ProcessMessages;
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end
else
RaiseLastOSError;
end;
end.
procedure BuildThread;
var
myThread: TThread;
begin
// Create an anonymous thread that calls a method and passes in
// the fetchURL to that method.
myThread := TThread.CreateAnonymousThread(
procedure
begin
ExecAndWait();
end);
end;
我加了這一點:
procedure RunThread(const CommandLine: string);
var
myThread: TThread;
begin
myThread := TThread.CreateAnonymousThread(
procedure
begin
ExecAndWait(CommandLine);
end). Start;
end;
你的問題是什麼? –
@DavidHeffernan,基本上我想知道如何防止「不響應」顯示。我在線閱讀,他們建議將CreateProcess放入線程 –
創建一個線程以等待進程句柄。當它被髮信號時,通知UI線程。 –