Code: Select all
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmFilter());
}
Code: Select all
[STAThread]
static void Main(string[] args)
{
var thread = new Thread(() =>
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmFilter());
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
var frm = new frmFilter(); // this form showing
frm.ShowDialog();
}
< /code>
Ich brauche eine Erläuterung, warum dieser Code ein Formular anzeigt, wenn ich mein Exe aus einer anderen Anwendung ausführe? Wenn ich nur eine Zeile lösche, hört alles auf zu arbeiten. < /P>
Erklären Sie, warum dieser Code funktioniert? Das FRMFilter -Formular wird angezeigt: < /p>
static void Main(string[] args)
{
var thread = new Thread(new ThreadStart(() =>
{
MessageBox.Show("test"); // If I delete this line, the form will not be displayed, why?
var frm = new frmFilter();
frm.ShowDialog();
}));
thread.Start();
}
< /code>
Dies ist der Code der C ++ - Anwendung, in dem mein EXE ausgeführt wird, in dem das Formular das Formular über der C ++ - Anwendung sein sollte < /p>
CString sPath = GetFilePath( m_sInsFolder );
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = m_sParserApp;
ShExecInfo.lpParameters = sArg;
ShExecInfo.lpDirectory = sPath;
ShExecInfo.nShow = SW_HIDE;
ShExecInfo.hInstApp = NULL;
int ret = (int)ShellExecuteEx(&ShExecInfo);
Geben Sie hier die Bildbeschreibung ein
In Rot habe ich das hervorgehoben C#-Formular, das auf C++ basieren sollte. In Blau ist C++ MFC.
Mein obiger C#-Code funktioniert, aber ich weiß nicht warum. Ich möchte eine schöne Lösung, um ein C#-Formular über einer C++-Anwendung zu haben. C# net 4.6.1, C++ ist eine MFC-Anwendung.
Dieser Code macht alles genau so, wie ich es brauche, um meine C#-Anwendung auf C++ mfc anzuzeigen. Aber sobald ich die Zeile lösche: MessageBox.Show("test"); Mein Formular über C++ wird nicht angezeigt. Ich möchte eine Antwort erhalten, warum mein Formular nicht angezeigt wird und wie ich es richtig mache, damit es über der C++-Anwendung ohne MessageBox.Show("test");
angezeigt wird
Code: Select all
static void Main(string[] args)
{
var thread = new Thread(new ThreadStart(() =>
{
MessageBox.Show("test");
var frm = new frmFilter();
frm.ShowDialog();
}));
thread.Start();
}
< /code>
Dieser Code tut auch das, was ich brauche, aber es sieht einfach schrecklich aus und ich möchte wissen, wie es elegant und richtig ist. < /p>
[STAThread]
static void Main(string[] args)
{
var thread = new Thread(() =>
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmFilter());
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
var frm = new frmFilter(); // this form showing
frm.ShowDialog();
}