C#でGUIをブロックせずに待機する方法


  1. タスクの使用: C#では、System.Threading.Tasks.Taskクラスを使用して非同期処理を実現できます。タスクを使用すると、GUIスレッドをブロックせずに処理を待機できます。次のコード例を参考にしてください。
using System;
using System.Threading.Tasks;
public class Program
{
    public static async Task Main()
    {
        Console.WriteLine("処理を開始します");
        await Task.Delay(5000); // 5秒待機する非同期処理
        Console.WriteLine("処理が完了しました");
    }
}

上記の例では、Task.Delayメソッドを使用して5秒間待機しています。awaitキーワードを使用して非同期に待機することで、GUIスレッドがブロックされずに処理が進行します。

  1. コールバックを使用: C#では、コールバックを使用して非同期処理を実現することもできます。コールバックを使用すると、待機中に他の処理を実行できます。以下に簡単な例を示します。
using System;
public class Program
{
    public static void Main()
    {
        Console.WriteLine("処理を開始します");

        Delay(5000, () =>
        {
            Console.WriteLine("処理が完了しました");
        });
        // 他の処理を実行する
    }
    public static void Delay(int milliseconds, Action callback)
    {
        System.Threading.Timer timer = null;
        timer = new System.Threading.Timer(_ =>
        {
            callback();
            timer.Dispose();
        }, null, milliseconds, System.Threading.Timeout.Infinite);
    }
}

上記の例では、Delayメソッドを使用して指定されたミリ秒数待機し、コールバック関数を呼び出しています。これにより、GUIスレッドがブロックされずに他の処理を実行できます。

以上の方法を使用することで、C#でGUIをブロックせずに待機することができます。適切な方法を選択し、アプリケーションの応答性を向上させることが重要です。