This shows you the differences between two versions of the page.
— |
blog:2025-04-23-001 [2025/04/23 14:02] (current) jethro created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ~~NOTOC~~ | ||
+ | ====== 2025-04-23 C# 呼叫 async Task Task_SaveWebToJPG() 等待執行完成後再繼續 ====== | ||
+ | * 希望在 C# 中呼叫 Task_SaveWebToJPG 方法,並確保在該方法執行完成後才繼續執行後續程式碼。 | ||
+ | * 以下是程式碼,確保 await 正確使用以等待非同步任務完成。 | ||
+ | ===== 程式碼 ===== | ||
+ | * <sxh c#>private async Task Task_SaveWebToJPG() | ||
+ | { | ||
+ | try | ||
+ | { | ||
+ | Console.WriteLine("Web main screen capture and save to file."); | ||
+ | await Task_ChromePageScreenCaptureToFile(@"./LOG/main_screen_dump.png"); | ||
+ | } | ||
+ | catch (Exception ex) | ||
+ | { | ||
+ | MessageBox.Show(ex.ToString()); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // 呼叫方法並等待完成 | ||
+ | private async Task ExecuteSaveWebToJPG() | ||
+ | { | ||
+ | await Task_SaveWebToJPG(); | ||
+ | // 在這裡繼續執行後續程式碼,確保 Task_SaveWebToJPG 已完成 | ||
+ | Console.WriteLine("Screen capture completed. Proceeding with next steps."); | ||
+ | }</sxh> | ||
+ | ===== 說明 ===== | ||
+ | * await 使用:在 Task_SaveWebToJPG 方法中,已經正確使用了 await 來等待 Task_ChromePageScreenCaptureToFile 完成。 | ||
+ | * 外部呼叫等待:如果您是在其他地方呼叫 Task_SaveWebToJPG,則需要在呼叫時同樣使用 await,以確保該方法完成後才執行後續程式碼。例如在 ExecuteSaveWebToJPG 方法中所示。 | ||
+ | * 異常處理:保留了原有的 try-catch 區塊,確保異常能夠被捕獲並顯示在 MessageBox 中。 | ||
+ | ===== 如果在非非同步方法中呼叫 ===== | ||
+ | * 如果您需要在一個非非同步方法(例如 void 方法)中呼叫 Task_SaveWebToJPG,可以使用 Task.Wait() 或 Task.Result,但這可能導致阻塞 UI 線程,建議盡量避免。如果不得已,可以這樣做: | ||
+ | * <sxh c#>private void ExecuteSaveWebToJPG_Sync() | ||
+ | { | ||
+ | Task_SaveWebToJPG().Wait(); // 同步等待任務完成,但可能阻塞 UI 線程 | ||
+ | Console.WriteLine("Screen capture completed. Proceeding with next steps."); | ||
+ | }</sxh> | ||
+ | * 注意:使用 Wait() 可能導致死鎖,尤其是在 UI 應用程式中,建議盡可能使用 await 並將方法設計為非同步。 | ||
+ | ===== TAGS ===== | ||
+ | * | ||
+ | ====== ====== | ||
+ | * {{counter}} person(s) visited this page until now. | ||
+ | * [[:memo:index|Back]] | ||
+ | ====== ====== | ||
+ | <html><!-- | ||
+ | PDF for A4-Portrait: {{pdfjs 50%,450px > xxx.pdf?page-fit}} | ||
+ | PDF for A4-Landscape: {{pdfjs 500px,700px > xxx.pdf?page-fit}} | ||
+ | PDF for iPad Note: {{pdfjs 700px,500px > xxx.pdf?page-fit}} | ||
+ | |||
+ | Youtube: {{youtube>large:XXXXX}} | ||
+ | Code Highlight: <sxh php; first-line: 70; highlight: [89,92]; title: New title attribute in action> | ||
+ | |||
+ | --></html> | ||