Form.ShowDialog(this)

有时遇到一种情况,.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)
               { }
           }));
       }
时间: 2024-12-23 11:55:02

Form.ShowDialog(this)的相关文章

Form.Show()与Form.ShowDialog()的区别

一 基本概念 首先,窗体和对话框的显示有两种方式:有模式&无模式. 有模式:显示重要消息的对话框应始终是有模式的,"模式"窗体或对话框必须关闭或隐藏,然后您才能继续使用应用程序的其余部分,例如 MessageBox 就是一个可供使用的有模式的窗体. 无模式:"无模式"窗体让您在此窗体与另一窗体之间变换焦点,而不必关闭初始窗体.用户在该窗体显示的同时可继续在任何应用程序的其他位置工作. 二 实现 1.将窗体显示为有模式对话框: Form.ShowDialog(

Form.ShowDialog和Form.DialogResult

The dialog result of a form is the value that is returned from the form when it is displayed as a modal dialog box. If the form is displayed as a dialog box, setting this property with a value from the DialogResult enumeration sets the value of the d

Application.Run()和Form.Show()以及Form.ShowDialog()

ShowDialog()弹出模式化的窗体 Show()弹出非模式化的窗体 模式窗体,在关闭或隐藏前无法切换到主窗体. 非模式窗体,变换焦点使不必关闭窗体 总结:显示重要的信息,还是用模式窗体,如删除文件,可以确保用户正真想要删除的是该文件 非模式的,窗体访问的顺序没有办法得知,比较适合显示程序的一些相关信息. 用show的话可能会一闪而过

C# show和showdialog区别

在C#中窗口的显示有两种方式:模态显示(showdialog)和非模态显示(show). 区别: 模态与非模态窗体的主要区别是窗体显示的时候是否可以操作其他窗体.模态窗体不允许操作其他窗体,非模态窗体可以操作其他窗体. 模态显示后,弹出窗口阻止调用窗口的所有消息响应.只有在弹出窗口结束后调用窗口才能继续.在模态窗口"关闭"后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值. 在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 窗体显示为模式

C# WinForm中Show与ShowDialog

show()与showDialog()的区别 2010-06-05 14:22:51|  分类: c#学习|举报|字号 订阅 A.WinForm中窗体显示  显示窗体可以有以下2种方法:  Form.ShowDialog方法 (窗体显示为模式窗体)  Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如下:  1.在调用Form.Show方法后,Show方法后面的代码会立即执行  2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码  3.当窗体显

C#中关闭第一个Form窗口,打开另一个新窗口方法

很多同学问怎么关闭一个FORM打开另一个新Form.这个问题最多的是在做登录验证时,使用第一个登录窗 登录成功后要关闭自己,然后打开新窗显示.没想到这个问题在.Net还成了问题,不过依然有很多方法解决. 典型的 Form1 f = new Form1(); f.Show(); this.Close(); 最后的关闭时把整个程序都关闭了 1隐藏法,原理就是把旧窗口隐藏掉,再打开新窗口. //新建一个NewForm窗口(NewForm是自己定义的Form) NewForm fm=new NewFor

show()与showDialog()的区别

A.WinForm中窗体显示  显示窗体可以有以下2种方法:  Form.ShowDialog方法 (窗体显示为模式窗体) Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如下: 1.在调用Form.Show方法后,Show方法后面的代码会立即执行 2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 3.当窗体显示为模式窗体时,单击“关闭”按钮会隐藏窗体,并将DialogResult属性设置为DialogResult.Cancel 与无模式窗体

C# 窗体位置 Show和ShowDialog(转)

CenterParent 窗体在其父窗体中居中. CenterScreen 窗体在当前显示窗口中居中,其尺寸在窗体大小中指定. Manual 窗体的位置由 Location 属性确定. WindowsDefaultBounds 窗体定位在 Windows 默认位置,其边界也由 Windows 默认决定. WindowsDefaultLocation 窗体定位在 Windows 默认位置,其尺寸在窗体大小中指定. 也就是说,CenterScreen的意思并不是屏幕居中(是相对的),它是在"当前显示

C# 非模式窗体show()和模式窗体showdialog()的区别(转)

对话框不是模式就是无模式的.模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载).例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击“确定”或“取消”,则它就是模式的. 一.如何调用 任何窗体(派生于基类Form的类),都可以以两种方式进行显示. //非模式窗体 From qform=new Form(); qform.Show(); //模式窗体 Form qform=new Form(); qform.ShowDialog(); 一.控制权上的区别 Fo