我有一个C++的程序,其中弹出某个c#的对话框,用户进行某些输入之后,点击ok按钮,结束对话框。从对话框得到的输入,会发送给C++进行某些处理。
如果处理的时间很短,很快,程序没有什么问题。如果处理的时间很长,会发现c#的对话框不立即消失,一直到c++处理完毕,对话框才消失。请教,如何才能点击对话框上的ok按钮之后,让对话框迅速消失呢。因为此后对话框没什么用了。我需要显示c++实现的主程序。同时把鼠标改成沙漏即可。鼠标改成沙漏没什么问题。现在就是不知道如何让对话框迅速关闭。得到用户输入倒是很快。c#调用c++的函数,把对话框里得到的用户输入作为参数传给c++。尝试过用delegate的begininvoke,似乎没用。给位高手有何建议?

解决方案 »

  1.   

    点击OK以就让这个窗体.Hide()行不?反正你点了OK后就已经把值传出去了
      

  2.   

    你是在UI线程调用C++函数的吧,尝试一下用一个工作线程调用C++函数呢,这样窗体应该可以先关闭。
      

  3.   

    你调用C++函数的入口不对吧,应该是你弹出窗口,ShowDialog关闭时候,判断OK了,再调C++或者你其它的处理,这样弹出的对话框就是关闭了的FrmInput frm=new FrmInput();
     if (frm.ShowDialog() == DialogResult.OK)
                {
    //调用得到值后的处理
                }
      

  4.   

    当然是使用线程来解决,用线程怕麻烦?
    没问题,M$想的周到,使用BackgroundWorker类,自己看看MSDN吧。
      

  5.   

    真是奇怪。ShowDialog()返回true,对话框却没有立即消失,假死在那里了。怎么办呢?继承自 System.Windows.Window.
      

  6.   

    再给帖子加100分。不解决问题不揭帖。多线程就别说了。我这里不太适合多线程。无论是想把ShowDialog多线程,还是想把之后的调用cpp进行结果处理,都不太合适,因为他们有大量的跟当前线程的交互。
      

  7.   

    8楼的代码作下修改
    FrmInput frm=new FrmInput();
    if (frm.ShowDialog() == DialogResult.OK)
                {
    //在这里加上Thread.Sleep(100);试试
    //调用得到值后的处理
                }