Здравствуйте. Делаю веб морду для приложения. Для этого использую веб сервер mongoose. Приложение написано на с++ .Net.
Основное приложение и сервер находятся в разных потоках. Для взаимодействия между ними реализован класс посредника, реализован как синглтон.
Задача сводится к тому, чтобы посредством посредника из сервера вызывать функции формы.
Код формы
public ref class MainForm : public System::Windows::Forms::Form{
...
public:MainForm(void){
doWithEffect^ up;
up = gcnew doWithEffect(this,&hitekfloor::MainForm::moveEffectUp);
doWithEffect^ down;
down = gcnew doWithEffect(this,&hitekfloor::MainForm::moveEffectDown);
MediatorBetweenProgrammAndWebServer::getInstance()->setFucntionForEffects(up,down);
}
public: bool moveEffectUp(int num){/*Эта функция должна вызываться из MediatorBetweenProgrammAndWebServer */
if (this->InvokeRequired){
doWithEffect^ d = gcnew doWithEffect(this, &moveEffectUp);
this->Invoke(d, gcnew array<Object^> {num});
}else
SchedulerModel->MoveItemUp(num);
return true;
}
};
Делегат
public delegate bool doWithEffect(int num);
Код посредника
ref class MediatorBetweenProgrammAndWebServer : System::Object{
public:
static MediatorBetweenProgrammAndWebServer^ getInstance();
void resetInstance();
void setFucntionForEffects(doWithEffect^ up, doWithEffect^ down);
void MoveEffectUp(unsigned int itemIndex);
void MoveEffectDown(unsigned int itemIndex);
protected:
MediatorBetweenProgrammAndWebServer();
~MediatorBetweenProgrammAndWebServer();
private:
static MediatorBetweenProgrammAndWebServer^ m_mediator;
doWithEffect^ upEffect;
doWithEffect^ downEffect;
};
mediator.cpp
...
void MediatorBetweenProgrammAndWebServer::setFucntionForEffects(doWithEffect^ up, doWithEffect^ down){
upEffect = up;
downEffect = down;
return;
}
...
Как видно из приведенных огрызков кода, моя идея состоит в том, чтобы вместо того, чтобы передавать в посредник указатель на форму, передать ему делегаты требуемых функций. К сожалению, получаю следующий результат при вызове moveEffectUp из посредника:
A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll