我有一個C#方法,它使用第三方可執行文件設置所有顯示器的亮度。我使用下面的方法調用它。問題是我需要用不同的參數調用這個可執行文件來改變亮度。但每次我調用SetBrightness時,我的代碼都會創建一個新進程。如何使用已經運行的退出進程並傳遞不同的參數來再次執行?我沒有看到Process類中的任何方法使得這很容易。調用Process.Start一次和後續調用,而不開始新的過程
編輯:當我使用命令行運行此exe文件時,進程在Windows系統托盤中保持打開狀態,並且我看到該進程正在任務管理器中運行。然而,當我運行我的代碼時,我有時會在任務管理器中看到exe的兩個實例。所以我想我試圖做的是總是調用相同的實例,但使用不同的參數。每次重新啓動exe都不是一種選擇,因爲每次啓動都需要很長時間。
public bool SetBrightness(short monitorStartIndex, short monitorEndIndex, short brightness)
{
// Construct the parameter string used by the tool so that it updates all monitors in one call.
// Example "1 b75 2 b75" will set brightness to 75 for monitors 1 and 2.
StringBuilder arguments = new StringBuilder();
for (int i = monitorStartIndex; i <= monitorEndIndex; i++)
{
arguments.Append(i).Append(" ");
arguments.Append(string.Format("b{0}", brightness)).Append(" ");
}
var path = Path.GetDirectoryName(Environment.GetCommandLineArgs()[1]);
var final = Path.Combine(path, "External Assemblies\\ClickMonitorDDC_3_9.exe");
var p = new Process
{
StartInfo =
{
FileName = final,
Arguments = arguments.ToString(),
UseShellExecute = false,
RedirectStandardOutput = true
}
};
try
{
p.Start();
}
catch (Exception e)
{
Trace.TraceError("Error while changing the brightness using ClickMonitorDDC_3_9.exe. Inner Exception : " + e.Message);
return false;
}
return true;
}
爲什麼不將過程存儲爲靜態變量,然後結束調用在啓動該功能的過程中,每次?編輯:或者,如果進程設置爲在其已經運行後接收更多數據,則每次發送新指令。沒有更多信息,這是我能給出的最佳答案。 – HumbleWebDev
你說你需要用不同的參數來調用這個exe來改變亮度。所以,除非你真的不需要這樣做,否則你不需要再次啓動它作爲一個新的進程來再次啓動exe文件嗎?我錯過了什麼嗎? –
我編輯了我的問題與更多信息。希望這可以幫助。我如何發送新的說明? – Ray