C#多线程的学习笔记
实现在跳转到下一个界面的时候自动关闭当前界面:
form2 form = new form2();
form.Owner = this;
this.Hide();
form.ShowDialog();
Application.ExitThread();
Exit不仅关闭窗口还关闭其占用的资源,而close则只关闭当前的窗口并不释放资源,exitThread与exit区别在于后者是关闭所有的窗口一般用于最后
可以通过调整visible来实现同一个窗口之间不同界面的效果
为了实现在不同界面之间(子界面与父界面)的数据传递,可以声明要传递的数据为public static
XXX
窗口关闭小妙招:
1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;
2.Application.Exit(); 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;
3.Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;
4.System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。
一般情况下不需要给应用程序写退出函数,执行默认退出函数即可,但是有情况还需要用以上几种函数的。
//如果想不关闭,只是隐藏 可以选择下面的方法;
在FormClosing事件中添加代码e.Cancel = true;然后安装任务栏图标即可(方法是拖一个任务栏图标的控件,设置它的图标);最后让你的窗体隐藏this.Hide();
事件与委托的绑定与使用:
一共需要做三个准备步骤:
1.定义一个委托类型
public delegate void//此处类型 EventHandler();
2.定义一个事件源类
类里面要有一个类属性 public event EventHandler Check;
以及一个开始调用事件函数的一个成员函数
public void startPlay()
{
Check?.Invoke();
}
3.定义事件发生时所需要执行的函数
这个函数直接写即可
在发生事件的语句中实例化一个事件源类并且将实例化后的对象于事件函数相绑定而后开始调用
BigMoneyFetched check = new BigMoneyFetched();
check.Check += Checkmoney;
check.startPlay();
在对于C#的窗体界面进行编程的时候必须注意使每一个窗口的form代码在最上面不要再其之上写函数或者类
文件的创建
ingclude<windows.h>
void CreateFil(string str,const char* c)
{
FILE *fp = NULL;const char*p = str.data();
fopen_s(&fp,p,c);
fprintf(fp, "写入txt文件\n");
fclose(fp);
}
fopen函数第二个参数是新建文件的位置,第三个参数是文件的打开模式w表示可写可读
文件的删除
LPCWSTR stringToLPCWSTR(std::string orig)
{
wchar_t *wcstring = 0;
try
{
size_t origsize = orig.length() + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
if (orig == "")
{
wcstring = (wchar_t *)malloc(0);
mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
}
else
{
wcstring = (wchar_t *)malloc(sizeof(wchar_t)*(orig.length() - 1));
mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);
}
}
catch (std::exception e)
{
}
return wcstring;
}
void RmOrder(string str)
{
DeleteFile(stringToLPCWSTR(str));//str是要删除的文件所在的位置(路径+文件名)
}
C#的对话框使用总结
SaveFileDialog
该类打开一个消息框提示用户保存文件的位置
Stream myStream ;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
saveFileDialog1.FilterIndex = 2 ;
saveFileDialog1.RestoreDirectory = true ;
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if((myStream = saveFileDialog1.OpenFile()) != null)
{
// Code to write the stream goes here.
myStream.Close();
}
}
主要属性说明:
Filter:“txt files (*.txt)”这里表示显示在弹出框内的后缀的默认后缀名|*txt决定后缀,其中可以用|来定义多个可选类型;
FilterIndex:表示默认选择的文件保存类型选择(如果在Filter中定义了多个后缀);
restoredirectory:OpenFileDialog与SaveFileDialog都有RestoreDirectory属性,这个属性默认是false,打开一个文件后,那么系统默认目录就会指向刚才打开的文件。如果设为true就会使用系统默认目录.
OpenFileDialog
var fileContent = string.Empty;
var filePath = string.Empty;
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.InitialDirectory = "c:\\";
openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//Get the path of specified file
filePath = openFileDialog.FileName;
//Read the contents of the file into a stream
var fileStream = openFileDialog.OpenFile();
using (StreamReader reader = new StreamReader(fileStream))
{
fileContent = reader.ReadToEnd();
}
}
}
这个对话框是打开文件对话框,注意这个可以得到所选择的文件的路径通过其的FileName属性
FolderBrowserDialog
string defaultPath = "";
FolderBrowserDialog dialog = new FolderBrowserDialog();
//打开的文件夹浏览对话框上的描述
dialog.Description = "请选择一个文件夹";
//是否显示对话框左下角 新建文件夹 按钮,默认为 true
dialog.ShowNewFolderButton = false;
//首次defaultPath为空,按FolderBrowserDialog默认设置(即桌面)选择
if (defaultPath != "")
{
//设置此次默认目录为上一次选中目录
dialog.SelectedPath = defaultPath;
}
//按下确定选择的按钮
if (dialog.ShowDialog() == DialogResult.OK)
{
//记录选中的目录
defaultPath = dialog.SelectedPath;
}
MessageBox.show(defaultPath);
这里作用是选择一个文件夹而不是一个文件可以得到所选择的文件夹的路径
关于界面关闭时进行操作
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && ((int)m.WParam == SC_CLOSE))
{
//在这里写界面关闭时的操作代码
RollBack();
CentreForm.centreForm.Show();
this.Close();
return;
}
base.WndProc(ref m);
}