AppDomain.DoCallBack 方法
在另一个应用程序域中执行代码,该应用程序域由指定的委托标识。
**命名空间:**System
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
Public Sub DoCallBack ( _
callBackDelegate As CrossAppDomainDelegate _
)
用法
Dim instance As AppDomain
Dim callBackDelegate As CrossAppDomainDelegate
instance.DoCallBack(callBackDelegate)
public void DoCallBack (
CrossAppDomainDelegate callBackDelegate
)
public:
virtual void DoCallBack (
CrossAppDomainDelegate^ callBackDelegate
) sealed
public final void DoCallBack (
CrossAppDomainDelegate callBackDelegate
)
public final function DoCallBack (
callBackDelegate : CrossAppDomainDelegate
)
参数
- callBackDelegate
指定要调用的方法的委托。
备注
callBackDelegate 可指定按值封送、MarshalByRefObject 或 ContextBoundObject。
示例
下面的示例演示如何使用静态 DoCallBack 方法。
Public Module PingPong
Private greetings As String = "PONG!"
Sub Main()
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")
greetings = "PING!"
MyCallBack()
otherDomain.DoCallBack(AddressOf MyCallBack)
' Output:
' PING! from default domain
' PONG! from otherDomain
End Sub 'Main
Sub MyCallBack()
Dim name As String = AppDomain.CurrentDomain.FriendlyName
Console.WriteLine(greetings + " from " + name)
End Sub 'MyCallBack
End Module 'PingPong
static string greetings = "PONG!";
public static void Main() {
AppDomain currentDomain = AppDomain.CurrentDomain;
AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");
greetings = "PING!";
MyCallBack();
otherDomain.DoCallBack(new CrossAppDomainDelegate(MyCallBack));
// Output:
// PING! from default domain
// PONG! from otherDomain
}
static public void MyCallBack() {
string name = AppDomain.CurrentDomain.FriendlyName;
Console.WriteLine(greetings + " from " + name);
}
public ref class PingPong
{
private:
static String^ greetings = "PONG!";
public:
static void MyCallBack()
{
String^ name = AppDomain::CurrentDomain->FriendlyName;
Console::WriteLine( "{0} from {1}", greetings, name );
}
static void Ping()
{
AppDomain^ currentDomain = AppDomain::CurrentDomain;
AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
greetings = "PING!";
MyCallBack();
otherDomain->DoCallBack( gcnew CrossAppDomainDelegate( MyCallBack ) );
// Output:
// PING! from default domain
// PONG! from otherDomain
}
};
int main()
{
PingPong::Ping();
}
private static String greetings = "PONG!";
public static void main(String[] args)
{
AppDomain currentDomain = AppDomain.get_CurrentDomain();
AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");
greetings = "PING!";
MyCallBack();
otherDomain.DoCallBack(new CrossAppDomainDelegate(MyCallBack));
// Output:
// PING! from default domain
// PONG! from otherDomain
} //main
public static void MyCallBack()
{
String name = AppDomain.get_CurrentDomain().get_FriendlyName();
Console.WriteLine(greetings + " from " + name);
} //MyCallBack
下面的示例演示如何通过值使用 DoCallBack 方法。
<Serializable> _
Public Class PingPong
Private greetings As String = "PING!"
Public Shared Sub Main()
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
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 otherDomain
End Sub 'Main
Public Sub MyCallBack()
Dim name As String = AppDomain.CurrentDomain.FriendlyName
Console.WriteLine(greetings + " from " + name)
End Sub 'MyCallBack
End Class 'PingPong
[Serializable]
public class PingPong {
private string greetings = "PING!";
public static void Main() {
AppDomain currentDomain = AppDomain.CurrentDomain;
AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");
PingPong pp = new PingPong();
pp.MyCallBack();
pp.greetings = "PONG!";
otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));
// Output:
// PING! from default domain
// PONG! from otherDomain
}
public void MyCallBack() {
string name = AppDomain.CurrentDomain.FriendlyName;
Console.WriteLine(greetings + " from " + name);
}
}
[Serializable]
public ref class PingPong
{
private:
String^ greetings;
public:
PingPong()
{
greetings = "PING!";
}
void MyCallBack()
{
String^ name = AppDomain::CurrentDomain->FriendlyName;
Console::WriteLine( "{0} from {1}", greetings, name );
}
static void Ping()
{
AppDomain^ currentDomain = AppDomain::CurrentDomain;
AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
PingPong^ pp = gcnew PingPong;
pp->MyCallBack();
pp->greetings = "PONG!";
otherDomain->DoCallBack( gcnew CrossAppDomainDelegate( pp, &PingPong::MyCallBack ) );
// Output:
// PING! from default domain
// PONG! from otherDomain
}
};
int main()
{
PingPong::Ping();
}
/** @attribute Serializable()
*/
public class PingPong
{
private String greetings = "PING!";
public static void main(String[] args)
{
AppDomain currentDomain = AppDomain.get_CurrentDomain();
AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");
PingPong pp = new PingPong();
pp.MyCallBack();
pp.greetings = "PONG!";
otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));
// Output:
// PING! from default domain
// PONG! from otherDomain
} //main
public void MyCallBack()
{
String name = AppDomain.get_CurrentDomain().get_FriendlyName();
Console.WriteLine(greetings + " from " + name);
} //MyCallBack
} //PingPong
下面的示例演示如何通过引用使用 DoCallBack 方法。
Public Class PingPong
Inherits MarshalByRefObject
Private greetings As String = "PING!"
Public Shared Sub Main()
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
Dim otherDomain As AppDomain = AppDomain.CreateDomain("otherDomain")
Dim pp As New PingPong()
otherDomain.DoCallBack(AddressOf pp.MyCallBack)
pp.MyCallBack()
' Output:
' PING! from default domain
' PONG! from default domain
End Sub 'Main
Public Sub MyCallBack()
Dim name As String = AppDomain.CurrentDomain.FriendlyName
Console.WriteLine((greetings + " from " + name))
greetings = "PONG!"
End Sub 'MyCallBack
End Class 'PingPong
public class PingPong : MarshalByRefObject {
private string greetings = "PING!";
public static void Main() {
AppDomain currentDomain = AppDomain.CurrentDomain;
AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");
PingPong pp = new PingPong();
otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));
pp.MyCallBack();
// Output:
// PING! from default domain
// PONG! from default domain
}
public void MyCallBack() {
string name = AppDomain.CurrentDomain.FriendlyName;
Console.WriteLine(greetings + " from " + name);
greetings = "PONG!";
}
}
public ref class PingPong: public MarshalByRefObject
{
private:
String^ greetings;
public:
PingPong()
{
greetings = "PING!";
}
void MyCallBack()
{
String^ name = AppDomain::CurrentDomain->FriendlyName;
Console::WriteLine( "{0} from {1}", greetings, name );
greetings = "PONG!";
}
static void Ping()
{
AppDomain^ currentDomain = AppDomain::CurrentDomain;
AppDomain^ otherDomain = AppDomain::CreateDomain( "otherDomain" );
PingPong^ pp = gcnew PingPong;
otherDomain->DoCallBack( gcnew CrossAppDomainDelegate( pp, &PingPong::MyCallBack ) );
pp->MyCallBack();
// Output:
// PING! from default domain
// PONG! from default domain
}
};
int main()
{
PingPong::Ping();
}
public class PingPong extends MarshalByRefObject
{
private String greetings = "PING!";
public static void main(String[] args)
{
AppDomain currentDomain = AppDomain.get_CurrentDomain();
AppDomain otherDomain = AppDomain.CreateDomain("otherDomain");
PingPong pp = new PingPong();
otherDomain.DoCallBack(new CrossAppDomainDelegate(pp.MyCallBack));
pp.MyCallBack();
// Output:
// PING! from default domain
// PONG! from default domain
} //main
public void MyCallBack()
{
String name = AppDomain.get_CurrentDomain().get_FriendlyName();
Console.WriteLine(greetings + " from " + name);
greetings = "PONG!";
} //MyCallBack
} //PingPong
平台
Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0