Ref 和 Out 两者比较
共同点:out
、ref
都是传递引用(内存地址),使用后都将改变原来参数的数值。
不同点:ref
是有进有出,out
是只出不进(就是把一个参数通过传入方法时候,会自动清空原先所有,变为一个干净的参数):ref
可以把参数的值传入函数,但无法通过out
把一个数值传入方法中,ref参数在使用前必需初始化,而out不需要(初始化也没鸟用,早晚清空)。
可以看出,在没有初始化的情况下,out依旧可以传递,因为就算你初始化了还是被清空,而ref就不可以,在传递前必须进行初始化
最后大概总结一下:在我们需要多个返回值的时候,就用out,在需要修改修改原先引用的时候用ref!
为了便于传输数据。
类中默认是private
默认属性方法;自动填充私有字段。
在 Windows 窗体应用程序中,经常会在一个窗体中打开另一个窗体, 通过窗体上的不同菜单选择不同的操作,这种在一个窗体中打开另一个窗体的方式可以通过设置 MDI 窗体的方式实现。
MDI (Multiple Document Interface) 窗体被称为多文档窗体,它是很多 Windows 应用程序中常用的界面设计。
MDI 窗体的设置并不复杂,只需要将窗体的属性 IsMdiContainer 设置为 True 即可。
该属性既可以在 Windows 窗体的属性窗口中设置,也可以通过代码设置,这里在窗体加载事件 Load 中设置窗体为 MDI 窗体,代码如下。
this.IsMdiContainer = True;
此外,还可以在窗体类的构造方法中加入上面的代码。
其他信息: 线程间操作无效: 从不是创建控件“控件名”的线程访问它。
在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,有以下解决办法
1.可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 false
public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; }
2.使用委托调用
声明委托:
private delegate void MyDelegateUI();
使用委托在多线程中执行:
MyDelegateUI d = delegate{ this.stateLabel.Text = "正在读取目标文件"; }; this.stateLabel.Invoke(d);
这就是多线程界面元素操作的2种解决方法。