2011-12-13 82 views
0

所以我只是试图从GUI线程显示不同的线程窗体。对于我的生活中,我看不到正确的设置我的论据,这使我从捕获错误消息的调用:参数计数不匹配与Windows窗体ShowDialog委托

“参数数量不匹配”

任何想法,我应该如何正确设置参数传入?

#pragma once 
#include "ErrorSystemStop.h" 
using namespace System; 
using namespace System::Windows::Forms; 

delegate DialogResult ShowErrorWindow(System::Windows::Forms::IWin32Window^parentForm); 

void ThrowErrorWindow(System::String^ strErrorMessage, int iNumberOfSegments, System::Windows::Forms::IWin32Window^parentForm) 
{ 
//Only throw if we need too. 
if(!bErrorPause) 
{ 
    MainDisplay::ErrorSystemStop^stopMe = gcnew MainDisplay::ErrorSystemStop(strErrorMessage, iNumberOfSegments); 
    ShowErrorWindow^disp = gcnew ShowErrorWindow((System::Windows::Forms::Form ^)stopMe, &MainDisplay::ErrorSystemStop::ShowDialog); 
    stopMe->TopMost = true; 
    try 
    { 
     cli::array<System::Windows::Forms::IWin32Window ^>^Args = gcnew cli::array<System::Windows::Forms::IWin32Window ^>(1); 
     Args[0] = parentForm; 
     stopMe->Invoke(disp,(System::Windows::Forms::Form ^)stopMe, gcnew array<System::Object ^>{Args}); 
    } 
    catch(Exception ^e) 
    { 
     e->Message; 
    } 
} 
} //end ThrowErrorWindow 

我也试过:

array<Object^>^Args = {parentForm}; 
stopMe->Invoke(disp,(System::Windows::Forms::Form ^)stopMe, Args); 

谢谢

Alikar

回答

0

因此,原来我是路过的三个参数,我只是太累了,昨晚我没有注意到。

我已经凝结的代码到这一点:

delegate void ShowErrorWindow(ErrorThrowClass^form, System::String^ strErrorMessage, int iNumberOfSegments); 

void ThrowErrorWindow(System::String^ strErrorMessage, int iNumberOfSegments, System::Windows::Forms::Form^parentForm) 
{ 
//Only throw if we need too. 
if(!bErrorPause) 
{ 
    ShowErrorWindow^disp = gcnew ShowErrorWindow(&ErrorThrowClass::LaunchErrorWindow); 
    MthrControl(DataProtect,M_UNLOCK,M_DEFAULT); 
    try 
    { 
     array<Object^>^Args = {parentForm, strErrorMessage, iNumberOfSegments}; 
     parentForm->Invoke(disp, Args); 
    } 
    catch(Exception ^e) 
    { 
     e->Message; 
    } 
    MthrControl(DataProtect,M_LOCK,M_DEFAULT); 
} 
} //end Throw ErrorWindow 

代码启动其他错误窗口现在是在父GUI对象的静态函数。这使得一切都可以在一个线程中启动。