AppDomain.DoCallBack(CrossAppDomainDelegate) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Ejecuta el código en otro dominio de aplicación identificado por el delegado especificado.
public:
virtual void DoCallBack(CrossAppDomainDelegate ^ callBackDelegate);
public void DoCallBack (CrossAppDomainDelegate callBackDelegate);
abstract member DoCallBack : CrossAppDomainDelegate -> unit
override this.DoCallBack : CrossAppDomainDelegate -> unit
Public Sub DoCallBack (callBackDelegate As CrossAppDomainDelegate)
Parámetros
- callBackDelegate
- CrossAppDomainDelegate
Delegado que especifica un método al que se va a llamar.
Implementaciones
Excepciones
callBackDelegate
es null
.
Ejemplos
En el ejemplo siguiente se muestra el uso de un método estático DoCallBack .
public ref class PingPong
{
private:
static String^ greetings = "PONG!";
public:
static void Main()
{
AppDomain^ otherDomain = AppDomain::CreateDomain("otherDomain");
greetings = "PING!";
MyCallBack();
otherDomain->DoCallBack(gcnew CrossAppDomainDelegate(MyCallBack));
// Output:
// PING! from defaultDomain
// PONG! from otherDomain
}
static void MyCallBack()
{
String^ name = AppDomain::CurrentDomain->FriendlyName;
if (name == AppDomain::CurrentDomain->SetupInformation->ApplicationName)
{
name = "defaultDomain";
}
Console::WriteLine(greetings + " from " + name);
}
};
int main()
{
PingPong::Main();
}
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);
}
open System
let mutable greetings = "PONG!"
let myCallBack () =
let mutable name = AppDomain.CurrentDomain.FriendlyName
if name = AppDomain.CurrentDomain.SetupInformation.ApplicationName then
name <- "defaultDomain"
printfn $"{greetings} from {name}"
let otherDomain = AppDomain.CreateDomain "otherDomain"
greetings <- "PING!"
myCallBack ()
otherDomain.DoCallBack(CrossAppDomainDelegate myCallBack)
// Output:
// PING! from defaultDomain
// PONG! from otherDomain
Public Module PingPong
Private greetings As String = "PONG!"
Sub Main()
Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")
greetings = "PING!"
MyCallBack()
otherDomain.DoCallBack(AddressOf MyCallBack)
' Output:
' PING! from defaultDomain
' PONG! from otherDomain
End Sub
Sub MyCallBack()
Dim name As String = AppDomain.CurrentDomain.FriendlyName
If name = AppDomain.CurrentDomain.SetupInformation.ApplicationName Then
name = "defaultDomain"
End If
Console.WriteLine(greetings + " from " + name)
End Sub
End Module 'PingPong
En el ejemplo siguiente se muestra el uso del DoCallBack método por valor.
[Serializable]
public ref class PingPong
{
private:
String^ greetings;
public:
PingPong()
{
greetings = "PING!";
}
static void Main()
{
AppDomain^ otherDomain = AppDomain::CreateDomain("otherDomain");
PingPong^ pp = gcnew PingPong();
pp->MyCallBack();
pp->greetings = "PONG!";
otherDomain->DoCallBack(gcnew CrossAppDomainDelegate( pp, &PingPong::MyCallBack));
// Output:
// PING! from defaultDomain
// PONG! from otherDomain
}
void MyCallBack()
{
String^ name = AppDomain::CurrentDomain->FriendlyName;
if (name == AppDomain::CurrentDomain->SetupInformation->ApplicationName)
{
name = "defaultDomain";
}
Console::WriteLine(greetings + " from " + name);
}
};
int main()
{
PingPong::Main();
}
[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);
}
}
open System
[<Serializable>]
type PingPong() as this =
[<DefaultValue>]
val mutable greetings: string
do
this.greetings <- "PING!"
member _.MyCallBack() =
let mutable name = AppDomain.CurrentDomain.FriendlyName
if name = AppDomain.CurrentDomain.SetupInformation.ApplicationName then
name <- "defaultDomain"
printfn $"{this.greetings} from {name}"
let otherDomain = AppDomain.CreateDomain "otherDomain"
let pp = PingPong()
pp.MyCallBack()
pp.greetings <- "PONG!"
otherDomain.DoCallBack(CrossAppDomainDelegate pp.MyCallBack)
// Output:
// PING! from defaultDomain
// PONG! from otherDomain
<Serializable> _
Public Class PingPong
Private greetings As String = "PING!"
Public Shared Sub Main()
Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")
Dim pp As New PingPong()
pp.MyCallBack()
pp.greetings = "PONG!"
otherDomain.DoCallBack(AddressOf pp.MyCallBack)
' Output:
' PING! from defaultDomain
' PONG! from otherDomain
End Sub
Public Sub MyCallBack()
Dim name As String = AppDomain.CurrentDomain.FriendlyName
If name = AppDomain.CurrentDomain.SetupInformation.ApplicationName Then
name = "defaultDomain"
End If
Console.WriteLine(greetings + " from " + name)
End Sub
End Class
En el ejemplo siguiente se muestra cómo usar el DoCallBack método por referencia.
public ref class PingPong : public MarshalByRefObject
{
private:
String^ greetings;
public:
PingPong()
{
greetings = "PING!";
}
static void Main()
{
AppDomain^ otherDomain = AppDomain::CreateDomain("otherDomain");
PingPong^ pp = gcnew PingPong();
pp->MyCallBack();
pp->greetings = "PONG!";
otherDomain->DoCallBack(gcnew CrossAppDomainDelegate( pp, &PingPong::MyCallBack));
// Output:
// PING! from defaultDomain
// PONG! from defaultDomain
}
// Callback will always execute within defaultDomain due to inheritance from
// MarshalByRefObject
void MyCallBack()
{
String^ name = AppDomain::CurrentDomain->FriendlyName;
if (name == AppDomain::CurrentDomain->SetupInformation->ApplicationName)
{
name = "defaultDomain";
}
Console::WriteLine(greetings + " from " + name);
}
};
int main()
{
PingPong::Main();
}
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);
}
}
open System
type PingPong() as this =
inherit MarshalByRefObject()
[<DefaultValue>]
val mutable greetings: string
do
this.greetings <- "PING!"
// Callback will always execute within defaultDomain due to inheritance from MarshalByRefObject
member this.MyCallBack() =
let mutable name = AppDomain.CurrentDomain.FriendlyName
if name = AppDomain.CurrentDomain.SetupInformation.ApplicationName then
name <- "defaultDomain"
printfn $"{this.greetings} from {name}"
let otherDomain = AppDomain.CreateDomain "otherDomain"
let pp = new PingPong()
pp.MyCallBack()
pp.greetings <- "PONG!"
otherDomain.DoCallBack(CrossAppDomainDelegate pp.MyCallBack)
// Output:
// PING! from defaultDomain
// PONG! from defaultDomain
Public Class PingPong
Inherits MarshalByRefObject
Private greetings As String = "PING!"
Public Shared Sub Main()
Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")
Dim pp As New PingPong()
pp.MyCallBack()
pp.greetings = "PONG!"
otherDomain.DoCallBack(AddressOf pp.MyCallBack)
' Output:
' PING! from default domain
' PONG! from default domain
End Sub
' Callback will always execute within defaultDomain due to inheritance from
' MarshalByRefObject
Public Sub MyCallBack()
Dim name As String = AppDomain.CurrentDomain.FriendlyName
If name = AppDomain.CurrentDomain.SetupInformation.ApplicationName Then
name = "defaultDomain"
End If
Console.WriteLine((greetings + " from " + name))
End Sub
End Class
Comentarios
callBackDelegate
puede especificar una referencia por valor, MarshalByRefObject, o ContextBoundObject.