第五课 用户登录
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五课用户登录
•用户登录窗体
•多线程编程
一、用户登录窗体
1、窗体模式
Windows窗体模式分Modal 和Modeless 两种,中文分别称为“模式窗体”和“非模式窗体”。
两种窗体模式的区别在于:窗体打开之后是否立即返回到调用者。非模式窗体打开后会立即返回,而模式窗口则必须关闭之后才会返回。
ShowDialog()方法:将窗体以“模式窗体”打开
Show()方法:将窗体以“非模式窗体”打开
用户登录窗体应以“模式窗体”打开,便控制未登录用户的操作。
2、模式窗体的返回与返回值
当设置窗体的DialogResult 属性为除枚举值DialogResult.None 之外的值时,窗体关闭,并返回所设置的窗体DialogResult 属性值。
System.Windows.Forms命名空间
enum DialogResult
{
None,
OK,
Cancel,
Abort,
Retry,
Ignore
Yes,
No
}
3. 窗体DialogResult 属性设置
1)直接赋值
2)通过命令按钮自动赋值
当单击命令按钮或窗体上的关闭按钮时,系统将自动把按钮的DialogResult 属性值赋给窗体的DialogResult 属性。
4. 用户登录窗体按钮
“登录”:DialogResult.None,当登录成功时,通过程序直接窗体DialogResult 属性设置为DialogResult.OK 或其他非None值。
“取消”:DialogResult.Cancel
5. 窗体默认命令按钮
当窗体焦点不在按钮上时,按下回车键、Esc钮,窗体自动“单击”的按钮。
窗体的AcceptButton 属性:设置“回车”默认按钮
窗体的CancelButton 属性:设置“Esc”默认按钮
6. 显示登录窗体
在主窗体的Load 事件处理函数中添加如下代码
FormSignIn fsi = new FormSignIn();
if (fsi.ShowDialog() != DialogResult.OK)
{
Application.Exit();
this.Dispose();
}
7. 登录实现
1)生成登录信息包
2)将信息包发送到服务器
3)根据服务器返回的信息确定是否成功登录。或成功登录则记录成功登录信息,并设置窗体的DialogResult为DialogResult.OK,否则提示错误信息,重新登录,或设置窗体的DialogResult为DialogResult.Cancel,退出应用程序。
先使用Demo 的GSCommon.dll 程序集中定义的类和方法来实现。
Demo服务器返回信息:
1)成功登录:返回在线用户信息表(数据库中VwOnlineUsers 视图)
2)失败分两种情况:一种是已在别处登录,返回逻辑值true, 另一种情况是密码或口令错,返回逻辑值false
二、多线程编程
1. 进程与线程
进程(process):程序的计算机中运行的实例。
线程(thread):一个进程中完成不同子任务的实例。
一个Windows 应用程序进程通常包含多个线程,其中一个线程为主线程————启动线程,负责接受和处理用户输入信息、更新用户界
面等,其他线程根据需要由程序员在进程/线程中创建。多线程使得一个进程能并行地执行不同的子任务。
2. 线程的创建
System.Threading.Thread
构造函数
1) Thread(ThreadStart 委托实例);
2) Thread(ParameterizedThreadStart 委托实例);
ThreadStart、与ParameterizedThreadStart 的构造函数中都带一个参数,这个参数就是:线程要执行的方法名称(线程代码),而且都是void 类型的方法。ThreadStart委托执行方法不带参数,ParameterizedThreadStart委托执行方法带一个object参数,由启动线程时将参数传递给委托执行的方法。
3. 线程的启动
启动无参数委托线程:Start();
启动参数化委托线程:Start(object对象)
4. 前台线程与后台线程
前台线程:负责接受和处理用户输入信息的的线程,影响用户界面的更新
后台线程:不影响用户界面更新的其他处理线程,
通过IsBackground 属性设置。
5。登录中使用多线程
可以避免出出现程序“假死”现象。
当单击“登录”时创建一后台线程,线程代码为向服务器发送信息,然后等待线程结束(先用查询线程状态的方式等待线程结束),处理服务器返回的信息。
如有侵权请联系告知删除,感谢你们的配合!