在C#MessageBox中,有MessageBox.Show 方法 (IWin32Window, String, String)的一个方法,但确不能使用这个方法,我的做法如下:
我先把窗口的句柄存入在变量里,如private IntPtr hWnd;,然后开一个线程运行另外一个方法,假如这个线程有问题要提示给用户,怎么样才能把MessageBox的消息放在窗口中呢?哪位高手有做过这个呢?

解决方案 »

  1.   

    如果是想弹出MessageBox信息,你直接在线程中调用即可,例如:
    private void ThreadFun()
    {
    for( int i = 0; i < 10; i++ )
    {
    Debug.WriteLine( "In Tread:" + i.ToString() );
    MessageBox.Show( i.ToString() );
    System.Threading.Thread.Sleep( 10 );
    }
    }// Calling
    Thread myThread = new Thread( new ThreadStart( ThreadFun ) ) ;
    myThread.Start();
      

  2.   

    Knight94,我知道可以直接在线程里弹出来,不过如果在线程里弹出来的话,在任务栏上就有像运行2个程序的样子,而且还可以操作主窗体的事件,这可不是我要实现的,还有其它方法吗?谢谢!!!
      

  3.   

    to Knight94,我知道可以直接在线程里弹出来,不过如果在线程里弹出来的话,在任务栏上就有像运行2个程序的样子,而且还可以操作主窗体的事件,这可不是我要实现的,还有其它方法吗?谢谢!!!如果是这样的话,你可以如下,不要传进去IntPtr,要传进去整个窗体对象。
    如果是简单线程,可以如下:
    private void ThreadFun()
    {
    for( int i = 0; i < 10; i++ )
    {
    Debug.WriteLine( "In Tread:" + i.ToString() );
    MessageBox.Show( this, i.ToString() );
    System.Threading.Thread.Sleep( 10 );
    }
    }// Calling
    Thread myThread = new Thread( new ThreadStart( ThreadFun ) ) ;
    myThread.Start();
      

  4.   

    如果是线程类的话,你需要传进当前窗体的对象,例如:
    public class ThreadClass
    {
        private yourForm pParent;
        public ThreadClass( yourForm ParentForm )
        {
             pParent = ParentForm;// init class member;
        }public void ThreadFun()
    {
    for( int i = 0; i < 10; i++ )
    {
    Debug.WriteLine( "In Tread:" + i.ToString() );
    MessageBox.Show( pParent, i.ToString() );//use class member to show message box
    System.Threading.Thread.Sleep( 10 );
    }
    }
    }//Calling 
    ThreadClass myThreadClass = new ThreadClass( this );
    //Create thread
      

  5.   

    "一个线程运行另外一个方法"是什麼意思?是不是說,在線程中又運行別的函數呢?如果是這樣的話,要用invoke
      

  6.   

    恩,搞定了,不用把主窗口传到线程里,只要用this就可以搞定了,谢谢...