Tôi có thể bắt đầu quá trình (sử dụng C# Process.Start()
) trong cùng một bảng điều khiển như chương trình gọi điện không? Bằng cách này, không có cửa sổ mới nào được tạo và đầu vào/đầu ra/lỗi chuẩn sẽ giống như ứng dụng bảng điều khiển gọi điện. Tôi đã thử thiết lập process.StartInfo.CreateNoWindow = true;
nhưng quá trình vẫn bắt đầu trong một cửa sổ mới (và ngay lập tức đóng sau khi nó kết thúc).Bắt đầu quy trình trong cùng một bảng điều khiển
Trả lời
Bạn shouldn 't cần phải làm bất cứ điều gì khác hơn là thiết lập UseShellExecute = false
, như là hành vi mặc định cho các chức năng Win32 CreateProcess là cho một ứng dụng giao diện điều khiển kế thừa giao diện điều khiển của cha mẹ của nó, trừ khi bạn chỉ định CREATE_NEW_CONSOLE cờ.
Tôi đã thử các chương trình sau đây:
private static void Main()
{
Console.WriteLine("Hello");
var p = new Process();
p.StartInfo = new ProcessStartInfo(@"c:\windows\system32\netstat.exe", "-n")
{
UseShellExecute = false
};
p.Start();
p.WaitForExit();
Console.WriteLine("World");
Console.ReadLine();
}
và nó đã cho tôi kết quả này:
Bạn có thể thử chuyển hướng đầu ra của quá trình này và sau đó in nó trên quá trình gọi console:
public class Program
{
static void Main()
{
var psi = new ProcessStartInfo
{
FileName = @"c:\windows\system32\netstat.exe",
Arguments = "-n",
RedirectStandardOutput = true,
UseShellExecute = false
};
var process = Process.Start(psi);
while (!process.HasExited)
{
Thread.Sleep(100);
}
Console.WriteLine(process.StandardOutput.ReadToEnd());
}
}
cách tiếp cận thay thế bằng cách sử dụng sự kiện Exited
và xử lý chờ đợi:
static void Main()
{
using (Process p = new Process())
{
p.StartInfo = new ProcessStartInfo
{
FileName = @"netstat.exe",
Arguments = "-n",
RedirectStandardOutput = true,
UseShellExecute = false
};
p.EnableRaisingEvents = true;
using (ManualResetEvent mre = new ManualResetEvent(false))
{
p.Exited += (s, e) => mre.Set();
p.Start();
mre.WaitOne();
}
Console.WriteLine(p.StandardOutput.ReadToEnd());
}
}
Bất kỳ lý do cụ thể cho Looping với 'Thread.Sleep' thay vì lắng nghe cho' Process. Đã thoát và đồng bộ hóa với một xử lý chờ đợi thay thế? –
Không, không có lý do cụ thể nào, chỉ là lười biếng, vui lòng chỉnh sửa câu trả lời của tôi để phản ánh đề xuất tuyệt vời này. –
Hoặc bạn chỉ có thể sử dụng 'Process.WaitForExit' :) –
- 1. Bắt đầu phát triển trình điều khiển
- 2. Chạy Bảng điều khiển Heroku không bắt đầu
- 3. Chuyển hướng đầu ra của Bảng điều khiển thời gian thực bằng quy trình
- 4. vấn đề quy trình bắt đầu
- 5. Tạo quy trình từ trình điều khiển
- 6. vẽ một nút trong bảng điều khiển winform trong khi bảng điều khiển được cuộn
- 7. Làm cách nào để viết đầu ra ở cùng một vị trí trên bảng điều khiển?
- 8. Bắt đầu ra bàn điều khiển từ lọ trong C#
- 9. Bắt đầu quy trình với thông số
- 10. Đọc đầu vào bảng điều khiển trong MonoDevelop
- 11. cscript - đầu ra in trên cùng một dòng trên bảng điều khiển?
- 12. Xóa một dòng trong bảng điều khiển
- 13. Cách bắt đầu quy trình trong cùng thư mục với tập tin thực thi
- 14. SEVERE: Lỗi bắt đầu Tài nguyên tĩnh trong bảng điều khiển máy chủ Tomcat
- 15. Bảng phân cảnh - Ẩn thanh trên cùng của bộ điều khiển điều hướng theo chương trình
- 16. Bàn điều khiển Rails sản xuất sẽ không bắt đầu
- 17. MongoDB Tìm kiếm biểu thức chính quy - Bắt đầu bằng cách sử dụng trình điều khiển javascript và NodeJS
- 18. Điều khiển hiển thị trên một bảng điều khiển khác
- 19. C# Process.Start() chậm hơn bảng điều khiển
- 20. Viết trình bao bọc bảng điều khiển trong C#?
- 21. Chính xác "Bảng điều khiển" là gì?
- 22. Đọc đầu vào từ bảng điều khiển trong OSX
- 23. Trình bao MongoDB: đọc một dòng từ bảng điều khiển
- 24. bắt đầu quá trình ghi trong Groovy
- 25. Nhiều bảng điều khiển tại một lần
- 26. Bắt đầu một quá trình riêng biệt
- 27. Thu gọn bảng điều khiển lồng ghép lồng nhau trong bảng điều khiển neolayout trong Ext.Viewport
- 28. C#: gửi ctrl + c đến bàn điều khiển chương trình bắt đầu với Process.Start()?
- 29. Liên kết bảng điều khiển JSF lên đầu trang
- 30. lập trình cấp thấp: Hệ điều hành bắt đầu một luồng/quy trình mới như thế nào?
Làm việc tuyệt vời, cảm ơn bạn. – ses011