码迷,mamicode.com
首页 > 其他好文 > 详细

Form.ShowDialog(this)

时间:2015-06-04 22:55:26      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

有时遇到一种情况,.ShowDialog()不显示,也不报错;如下:

<span style="font-size:14px;"> private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(show);
            thread.Start();
        }
       void show()
       {
           Control.CheckForIllegalCrossThreadCalls = false;
           //this.Invoke(new Action(() =>
           //{
               if (saveFileDialog1.ShowDialog() == DialogResult.OK)
               { }
           //}));
       }</span>
原因分析:这属于线程间操作的一种异常。界面呈现和新创建的thread分开在两个线程中。在thread线程中

                  不能够进行界面呈现,即显示.ShowDialog();

解决方法:1:添加参数this。

                        .ShowDialog(IWin32Window owner);    //owner:表示将拥有模式对话框的顶级窗口

<span style="font-size:14px;"> private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(show);
            thread.Start();
        }
       void show()
       {
           Control.CheckForIllegalCrossThreadCalls = false;
           //this.Invoke(new Action(() =>
           //{
               if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
               { }
           //}));
       }</span>

                  2:使用Invoke

        private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(show);
            thread.Start();
        }
       void show()
       {
           // Control.CheckForIllegalCrossThreadCalls = false;
           this.Invoke(new Action(() =>
           {
               if (saveFileDialog1.ShowDialog() == DialogResult.OK)
               { }
           }));
       }

Form.ShowDialog(this)

标签:

原文地址:http://blog.csdn.net/ilipan/article/details/46364863

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!