User Tools

Site Tools


blog:2025-04-23-001

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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>​
  
blog/2025-04-23-001.txt · Last modified: 2025/04/23 14:02 by jethro