英語で読む

次の方法で共有


AppDomain.DoCallBack(CrossAppDomainDelegate) メソッド

定義

指定したデリゲートで識別される、別のアプリケーション ドメイン内のコードを実行します。

C#
public void DoCallBack(CrossAppDomainDelegate callBackDelegate);

パラメーター

callBackDelegate
CrossAppDomainDelegate

呼び出すメソッドを指定するデリゲート。

実装

例外

callBackDelegatenullです。

次の例では、静的 DoCallBack メソッドの使用を示します。

C#
static string greetings = "PONG!";

public static void Main()
{
    AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

    greetings = "PING!";
    MyCallBack();
    otherDomain.DoCallBack(new CrossAppDomainDelegate(MyCallBack));

    // Output:
    //   PING! from defaultDomain
    //   PONG! from otherDomain
}

static public void MyCallBack()
{
    string name = AppDomain.CurrentDomain.FriendlyName;

    if (name == AppDomain.CurrentDomain.SetupInformation.ApplicationName)
    {
        name = "defaultDomain";
    }
    Console.WriteLine(greetings + " from " + name);
}

次の例では、 メソッドを値別に使用する方法を DoCallBack 示します。

C#
[Serializable]
public class CallbackByValSnippet
{
    private string greetings = "PING!";

    public static void Main()
    {
        AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

        CallbackByValSnippet pp = new CallbackByValSnippet();
        pp.MyCallBack();
        pp.greetings = "PONG!";
        otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));

        // Output:
        //   PING! from defaultDomain
        //   PONG! from otherDomain
    }

    public void MyCallBack()
    {
        string name = AppDomain.CurrentDomain.FriendlyName;

        if (name == AppDomain.CurrentDomain.SetupInformation.ApplicationName)
        {
            name = "defaultDomain";
        }
        Console.WriteLine(greetings + " from " + name);
    }
}

次の例では、 メソッドを参照で使用する方法を DoCallBack 示します。

C#
public class CallbackByRefSnippet : MarshalByRefObject
{
    private string greetings = "PING!";

    public static void Main()
    {
        AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");

        CallbackByRefSnippet pp = new CallbackByRefSnippet();
        pp.MyCallBack();
        pp.greetings = "PONG!";
        otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));

        // Output:
        //   PING! from defaultDomain
        //   PONG! from defaultDomain
    }

    // Callback will always execute within defaultDomain due to inheritance from
    // MarshalByRefObject
    public void MyCallBack()
    {
        string name = AppDomain.CurrentDomain.FriendlyName;
        if (name == AppDomain.CurrentDomain.SetupInformation.ApplicationName)
        {
            name = "defaultDomain";
        }
        Console.WriteLine(greetings + " from " + name);
    }
}

注釈

callBackDelegate では、値によるマーシャリング、、 MarshalByRefObjectまたは ContextBoundObjectを指定できます。

適用対象

製品 バージョン
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1