我有一个客户端程序,它使用 MarshalByRefObject 从远程服务器获取变量。有时程序会在远程服务器上运行,当我尝试获取该变量时,我的客户端程序只是挂起。有没有办法让这个变量的调用超时?
MyClass^ refObject = (MyClass^)System::Activator::GetObject(MyClass::typeid, url);
THEVARIABLE objectVariable = refObject->theVariable;
我有一个客户端程序,它使用 MarshalByRefObject 从远程服务器获取变量。有时程序会在远程服务器上运行,当我尝试获取该变量时,我的客户端程序只是挂起。有没有办法让这个变量的调用超时?
MyClass^ refObject = (MyClass^)System::Activator::GetObject(MyClass::typeid, url);
THEVARIABLE objectVariable = refObject->theVariable;
我看到的唯一方法是实现 IMessageFilter (COM)。在某些情况下,可以检测到存在从当前 STA 到另一个的进程外调用。但是 AFAIK 仅在输入消息(键盘/鼠标)到达时才会这样做。
使用消息过滤器,您可以显示诸如“等待外部通信呼叫...”之类的内容。同样在这种情况下,您可以中止外部呼叫。
请参阅 CoRegisterMessageFilter 和IMessageFilter