This documentation is archived and is not being maintained.
AppDomain::DoCallBack Method
Visual Studio 2010
Executes the code in another application domain that is identified by the specified delegate.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- callBackDelegate
- Type: System::CrossAppDomainDelegate
A delegate that specifies a method to call.
Implements
_AppDomain::DoCallBack(CrossAppDomainDelegate)| Exception | Condition |
|---|---|
| ArgumentNullException | callBackDelegate is nullptr. |
callBackDelegate can specify a marshal-by-value, MarshalByRefObject, or ContextBoundObject.
The following sample demonstrates using a static DoCallBack method.
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(); }
The following sample demonstrates using the DoCallBack method by value.
[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(); }
The following sample demonstrates using the DoCallBack method by reference.
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(); }
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Show: