此程式碼段示範如何在表單控制項中顯示即時指令輸出。讓我們完善它,以清楚和準確。
>
改進的說明和代碼:
區塊,直到UI執行緒完成更新,並可能導致延遲。 Invoke
>更好,因為它排隊更新並立即返回。但是,即使在這裡也不完全適合。 一種更強大的方法使用專用BeginInvoke
。 BeginInvoke
>
SynchronizationContext
這是改進方法和程式碼的細分:
。 >
async
await
>錯誤處理:
程式碼應包括錯誤處理以優雅地管理命令執行期間的潛在異常。更清晰的變數名稱:
更多的描述性變數名稱增強可讀性。改進的C#程式碼:
此修訂的程式碼更強大,有效率且可讀。它處理錯誤,使用非同步操作,並使用正確更新UI執行緒。請記得在程式碼檔案頂部加上和
。 另外,請確保在表單的文字方塊中正確指定命令及其參數。<code class="language-csharp">private async void btnExecute_Click(object sender, EventArgs e) { // Get currently selected tab page and controls var tabPage = tcExecControl.SelectedTab; var commandTextBox = (TextBox)tabPage.Controls[0]; // Assuming command is in the first control var argumentsTextBox = (TextBox)tabPage.Controls[1]; // Assuming arguments are in the second control var outputTextBox = (TextBox)tabPage.Controls[2]; // Assuming output textbox is the third control string command = commandTextBox.Text; string arguments = argumentsTextBox.Text; try { // Capture the SynchronizationContext for UI thread updates var uiContext = SynchronizationContext.Current; // Asynchronously execute the command await Task.Run(() => { using (var process = new Process()) { process.StartInfo.FileName = command; process.StartInfo.Arguments = arguments; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; // Redirect error stream as well process.Start(); // Read output line by line string line; while ((line = process.StandardOutput.ReadLine()) != null) { // Update the textbox on the UI thread uiContext.Post(_ => outputTextBox.AppendText(line + Environment.NewLine), null); } // Read and display error output (if any) string errorLine; while ((errorLine = process.StandardError.ReadLine()) != null) { uiContext.Post(_ => outputTextBox.AppendText("Error: " + errorLine + Environment.NewLine), null); } process.WaitForExit(); } }); } catch (Exception ex) { outputTextBox.AppendText($"An error occurred: {ex.Message}{Environment.NewLine}"); } }</code>
以上是如何在表單控制項中顯示即時命令輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!