AppDomain.DoCallBack(CrossAppDomainDelegate) Yöntem

Tanım

Kodu, belirtilen temsilci tarafından tanımlanan başka bir uygulama etki alanında yürütür.

C#
public void DoCallBack (CrossAppDomainDelegate callBackDelegate);

Parametreler

callBackDelegate
CrossAppDomainDelegate

Çağrılacak yöntemi belirten bir temsilci.

Uygulamalar

Özel durumlar

callBackDelegate, null değeridir.

Örnekler

Aşağıdaki örnekte statik DoCallBack bir yöntemin kullanılması gösterilmektedir.

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);
}

Aşağıdaki örnekte yöntemin değere göre DoCallBack kullanılması gösterilmektedir.

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

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

        PingPong pp = new PingPong();
        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);
    }
}

Aşağıdaki örnekte yöntemin başvuruya göre DoCallBack kullanılması gösterilmektedir.

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

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

        PingPong pp = new PingPong();
        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);
    }
}

Açıklamalar

callBackDelegate, veya ContextBoundObjectdeğerlerine göre MarshalByRefObjectsıralama belirtebilir.

Şunlara uygulanır

Ürün Sürümler
.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