多线程创建窗体并显示

sj490790083 2017-08-17 04:56:19
最近遇到一个问题,在非UI线程创建一个窗体(可以是自己new的线程,或者用一个委托异步创建),并Show是无法显示的,但是如果改用ShowDialog,就能够显示。并且就算UI线程被阻塞或卡死,也不影响新窗体的操作。
原因是什么?求指导

Action run=()=>{FormTest frm=new FormTest();frm.ShowDialog();};
run.BeginInvoke(null,null);

...全文
285 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
楚楚3107 2017-08-18
  • 打赏
  • 举报
回复
坐等大神,也想学习一下
sj490790083 2017-08-18
  • 打赏
  • 举报
回复
引用 10 楼 xdashewan 的回复:
引用 7 楼 sj490790083 的回复:
把你代码发上来看看,简化过的最好
项目代码比较复杂,我只是自己搞了个Demo测试一下,简化过就是这样了
被你带坑里了,我一开始的意思是为什么要在线程里去打开form,而不是建议去不让线程走完[/quote]钻牛角尖了,现在被我改成事件通知主线程去创建了,谢了
sj490790083 2017-08-18
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
看不懂什么叫做“让线程不被释放”,这里在纠结什么?你的 frm2 变量为什么不声明在 btnTest_Click 外边?怎么成为 btnTest_Click 的局部变量? 在子线程中操作控件不是不可以,但是你必须保证不存在多线程胡乱——冲突地——操作界面,才能避免产生难以调试的bug。所以一般来说使用“主线程”来操作所有界面控件也是这个道理。并不是说,用不同的线程操作操作不同的控件本身就没有问题,但是一般人根本做不到准确地用不同线程操作不同控件,而且也没有必要,所以才统一用一个UI线程。 换句话说,也就是,你操作主线程的流程有严重的设计bug,然后用更加诡异更加纠结的东西来“圆谎”来缓解矛盾,这其实是恶性循环。正确的方式当然还是把你的主线程流程问题解决好。
钻牛角尖了,现在被我改成事件通知主线程去创建了,谢了
xdashewan 2017-08-18
  • 打赏
  • 举报
回复
引用 7 楼 sj490790083 的回复:
把你代码发上来看看,简化过的最好
项目代码比较复杂,我只是自己搞了个Demo测试一下,简化过就是这样了 [/quote] 被你带坑里了,我一开始的意思是为什么要在线程里去打开form,而不是建议去不让线程走完
  • 打赏
  • 举报
回复
比如说,不懂事件驱动设计,所以所有这种东西都弄个“死循环+阻塞”代码,这就是常见的且非常严重的并发程序设计bug。
  • 打赏
  • 举报
回复
看不懂什么叫做“让线程不被释放”,这里在纠结什么?你的 frm2 变量为什么不声明在 btnTest_Click 外边?怎么成为 btnTest_Click 的局部变量? 在子线程中操作控件不是不可以,但是你必须保证不存在多线程胡乱——冲突地——操作界面,才能避免产生难以调试的bug。所以一般来说使用“主线程”来操作所有界面控件也是这个道理。并不是说,用不同的线程操作操作不同的控件本身就没有问题,但是一般人根本做不到准确地用不同线程操作不同控件,而且也没有必要,所以才统一用一个UI线程。 换句话说,也就是,你操作主线程的流程有严重的设计bug,然后用更加诡异更加纠结的东西来“圆谎”来缓解矛盾,这其实是恶性循环。正确的方式当然还是把你的主线程流程问题解决好。
sj490790083 2017-08-18
  • 打赏
  • 举报
回复
引用 6 楼 xdashewan 的回复:
[quote=引用 5 楼 sj490790083 的回复:] 我试了加了While(true),情况一样,能看到任务栏有个窗体,但是点不出来
把你代码发上来看看,简化过的最好[/quote]项目代码比较复杂,我只是自己搞了个Demo测试一下,简化过就是这样了

private void btnTest_Click(object sender,EventArgs e)
{
    int _i=0;
    Action run=()=>
    {
        Form2 frm2=new Form2();
        frm2.Show();
        while(true)
            {
                   i++;
            }
    }
    run.BeginInvoke(null,null);
}
xdashewan 2017-08-18
  • 打赏
  • 举报
回复
引用 5 楼 sj490790083 的回复:
我试了加了While(true),情况一样,能看到任务栏有个窗体,但是点不出来
把你代码发上来看看,简化过的最好
sj490790083 2017-08-18
  • 打赏
  • 举报
回复
引用 4 楼 xdashewan 的回复:
[quote=引用 3 楼 sj490790083 的回复:] 我用不是MessageBox的方式让线程不被释放,比如加个定时器,但还是不显示啊
我不清楚你如何用的定时器,但要使线程不释放主要就是让线程执行不完,最简单的例子就是while[/quote] 我试了加了While(true),情况一样,能看到任务栏有个窗体,但是点不出来
xdashewan 2017-08-18
  • 打赏
  • 举报
回复
引用 3 楼 sj490790083 的回复:
我用不是MessageBox的方式让线程不被释放,比如加个定时器,但还是不显示啊
我不清楚你如何用的定时器,但要使线程不释放主要就是让线程执行不完,最简单的例子就是while
sj490790083 2017-08-18
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
线程执行完毕后,线程内资源都释放了,不是无法显示,而是一闪而过,你在form里加个messagebox就能看到
我用不是MessageBox的方式让线程不被释放,比如加个定时器,但还是不显示啊
sj490790083 2017-08-18
  • 打赏
  • 举报
回复
xdashewan 2017-08-17
  • 打赏
  • 举报
回复
线程执行完毕后,线程内资源都释放了,不是无法显示,而是一闪而过,你在form里加个messagebox就能看到
C#源码大集合 01(共3卷)之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)├─C#源码第一部分│ ├─第1章 控件操作│ │ ├─实例1 如何使用错误提醒控件│ │ ├─实例10 如何使用列表视图控件│ │ ├─实例11 如何使用多选列表框控件│ │ ├─实例12 如何使用图像控件│ │ ├─实例13 如何使用窗体分隔控件│ │ ├─实例2 如何使用信息提示控件│ │ ├─实例3 如何使用菜单控件│ │ ├─实例4 如何使用工具栏控件│ │ ├─实例5 如何使用状态栏控件│ │ ├─实例6 如何使用托盘控件│ │ ├─实例7 如何使用标签页控件│ │ ├─实例8 如何使用进度条控件│ │ └─实例9 如何使用树视图控件│ ├─第2章 文件管理│ │ ├─实例14 如何获取程序文件信息│ │ ├─实例15 如何获取指定文件的根信息│ │ ├─实例16 如何获取当前程序所在的文件夹│ │ ├─实例17 如何获取指定文件夹下的所有文件│ │ ├─实例18 如何获取指定文件夹下的所有文件夹│ │ ├─实例19 如何获取和设置文件属性│ │ ├─实例20 如何获取和设置文件夹属性│ │ ├─实例21 如何判断文件或文件夹是否存在│ │ ├─实例22 如何创建和删除多层文件夹│ │ ├─实例23 如何监视文件和文件夹系统变化情况│ │ ├─实例24 如何加解密文件│ │ ├─实例25 如何切分组合文件│ │ ├─实例26 如何以流式方式读写文本文件│ │ ├─实例27 如何直接打印文件│ │ ├─实例28 如何操作帮助文件│ │ ├─实例29 如何操作WORD文件│ │ ├─实例31 如何播放MP3文件│ │ ├─实例32 如何播放VCD文件│ │ ├─实例33 如何播放DVD文件│ │ ├─实例34 如何播放Flash文件│ │ └─实例35 如何播放RealPlayer文件│ ├─第3章 程序设置│ │ ├─实例36 如何创建椭圆形窗体│ │ ├─实例37 如何创建文字形窗体│ │ ├─实例38 如何创建不规则窗体│ │ ├─实例39 如何创建移动的窗体│ │ ├─实例40 如何创建无标题栏窗体│ │ ├─实例41 如何拖动无标题栏窗体│ │ ├─实例42 如何制作自绘式菜单│ │ ├─实例43 如何制作图形组合框│ │ ├─实例44 如何设置窗体的透明度│ │ ├─实例45 如何设置窗体启动位置│ │ ├─实例46 如何设置窗体最前端显示│ │ ├─实例47 如何实现精灵提示│ │ ├─实例48 如何实现打印预览│ │ ├─实例49 如何实现剪贴板循环│ │ ├─实例50 如何实现菜单历史列表│ │ ├─实例51 如何实现程序互斥运行│ │ ├─实例52 如何屏蔽鼠标消息│ │ ├─实例53 如何模拟键盘输入│ │ ├─实例54 如何使用消息提示框│ │ ├─实例55 如何使用系统API函数(INI)│ │ ├─实例56 如何获取和设置输入法│ │ ├─实例57 如何在程序中启动其他程序│ │ ├─实例58 如何在程序中关闭其他程序│ │ ├─实例59 如何在开机时自动启动程序│ │ ├─实例60 如何启动电话拨号程序│ │ ├─实例61 如何启动屏幕保护程序│ │ ├─实例62 如何启动系统控制面板程序│ │ ├─实例63 如何编写多线程程序│ │ ├─实例64 如何编写DLL服务端程序│ │ ├─实例65 如何编写DLL客户端程序│ │ ├─实例66 如何编写用户控件程序│ │ └─实例67 如何给程序打包│ ├─第4章 系统维护│ │ ├─实例68 如何获取系统基本信息│ │ ├─实例69 如何获取系统服务信息│ │ ├─实例70 如何获取系统进程信息│ │ ├─实例71 如何获取系统日期时间│ │ ├─实例72 如何获取系统所有驱动器│ │ ├─实例73 如何获取系统驱动器信息│ │ ├─实例74 如何获取系统计数器信息│ │
C#源码大集合 03(共3卷)之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)├─C#源码第一部分│ ├─第1章 控件操作│ │ ├─实例1 如何使用错误提醒控件│ │ ├─实例10 如何使用列表视图控件│ │ ├─实例11 如何使用多选列表框控件│ │ ├─实例12 如何使用图像控件│ │ ├─实例13 如何使用窗体分隔控件│ │ ├─实例2 如何使用信息提示控件│ │ ├─实例3 如何使用菜单控件│ │ ├─实例4 如何使用工具栏控件│ │ ├─实例5 如何使用状态栏控件│ │ ├─实例6 如何使用托盘控件│ │ ├─实例7 如何使用标签页控件│ │ ├─实例8 如何使用进度条控件│ │ └─实例9 如何使用树视图控件│ ├─第2章 文件管理│ │ ├─实例14 如何获取程序文件信息│ │ ├─实例15 如何获取指定文件的根信息│ │ ├─实例16 如何获取当前程序所在的文件夹│ │ ├─实例17 如何获取指定文件夹下的所有文件│ │ ├─实例18 如何获取指定文件夹下的所有文件夹│ │ ├─实例19 如何获取和设置文件属性│ │ ├─实例20 如何获取和设置文件夹属性│ │ ├─实例21 如何判断文件或文件夹是否存在│ │ ├─实例22 如何创建和删除多层文件夹│ │ ├─实例23 如何监视文件和文件夹系统变化情况│ │ ├─实例24 如何加解密文件│ │ ├─实例25 如何切分组合文件│ │ ├─实例26 如何以流式方式读写文本文件│ │ ├─实例27 如何直接打印文件│ │ ├─实例28 如何操作帮助文件│ │ ├─实例29 如何操作WORD文件│ │ ├─实例31 如何播放MP3文件│ │ ├─实例32 如何播放VCD文件│ │ ├─实例33 如何播放DVD文件│ │ ├─实例34 如何播放Flash文件│ │ └─实例35 如何播放RealPlayer文件│ ├─第3章 程序设置│ │ ├─实例36 如何创建椭圆形窗体│ │ ├─实例37 如何创建文字形窗体│ │ ├─实例38 如何创建不规则窗体│ │ ├─实例39 如何创建移动的窗体│ │ ├─实例40 如何创建无标题栏窗体│ │ ├─实例41 如何拖动无标题栏窗体│ │ ├─实例42 如何制作自绘式菜单│ │ ├─实例43 如何制作图形组合框│ │ ├─实例44 如何设置窗体的透明度│ │ ├─实例45 如何设置窗体启动位置│ │ ├─实例46 如何设置窗体最前端显示│ │ ├─实例47 如何实现精灵提示│ │ ├─实例48 如何实现打印预览│ │ ├─实例49 如何实现剪贴板循环│ │ ├─实例50 如何实现菜单历史列表│ │ ├─实例51 如何实现程序互斥运行│ │ ├─实例52 如何屏蔽鼠标消息│ │ ├─实例53 如何模拟键盘输入│ │ ├─实例54 如何使用消息提示框│ │ ├─实例55 如何使用系统API函数(INI)│ │ ├─实例56 如何获取和设置输入法│ │ ├─实例57 如何在程序中启动其他程序│ │ ├─实例58 如何在程序中关闭其他程序│ │ ├─实例59 如何在开机时自动启动程序│ │ ├─实例60 如何启动电话拨号程序│ │ ├─实例61 如何启动屏幕保护程序│ │ ├─实例62 如何启动系统控制面板程序│ │ ├─实例63 如何编写多线程程序│ │ ├─实例64 如何编写DLL服务端程序│ │ ├─实例65 如何编写DLL客户端程序│ │ ├─实例66 如何编写用户控件程序│ │ └─实例67 如何给程序打包│ ├─第4章 系统维护│ │ ├─实例68 如何获取系统基本信息│ │ ├─实例69 如何获取系统服务信息│ │ ├─实例70 如何获取系统进程信息│ │ ├─实例71 如何获取系统日期时间│ │ ├─实例72 如何获取系统所有驱动器│ │ ├─实例73 如何获取系统驱动器信息│ │ ├─实例74 如何获取系统计数器信息│ │
C#源码大集合 02(共3卷) 之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷) ├─C#源码第一部分 │ ├─第1章 控件操作 │ │ ├─实例1 如何使用错误提醒控件 │ │ ├─实例10 如何使用列表视图控件 │ │ ├─实例11 如何使用多选列表框控件 │ │ ├─实例12 如何使用图像控件 │ │ ├─实例13 如何使用窗体分隔控件 │ │ ├─实例2 如何使用信息提示控件 │ │ ├─实例3 如何使用菜单控件 │ │ ├─实例4 如何使用工具栏控件 │ │ ├─实例5 如何使用状态栏控件 │ │ ├─实例6 如何使用托盘控件 │ │ ├─实例7 如何使用标签页控件 │ │ ├─实例8 如何使用进度条控件 │ │ └─实例9 如何使用树视图控件 │ ├─第2章 文件管理 │ │ ├─实例14 如何获取程序文件信息 │ │ ├─实例15 如何获取指定文件的根信息 │ │ ├─实例16 如何获取当前程序所在的文件夹 │ │ ├─实例17 如何获取指定文件夹下的所有文件 │ │ ├─实例18 如何获取指定文件夹下的所有文件夹 │ │ ├─实例19 如何获取和设置文件属性 │ │ ├─实例20 如何获取和设置文件夹属性 │ │ ├─实例21 如何判断文件或文件夹是否存在 │ │ ├─实例22 如何创建和删除多层文件夹 │ │ ├─实例23 如何监视文件和文件夹系统变化情况 │ │ ├─实例24 如何加解密文件 │ │ ├─实例25 如何切分组合文件 │ │ ├─实例26 如何以流式方式读写文本文件 │ │ ├─实例27 如何直接打印文件 │ │ ├─实例28 如何操作帮助文件 │ │ ├─实例29 如何操作WORD文件 │ │ ├─实例31 如何播放MP3文件 │ │ ├─实例32 如何播放VCD文件 │ │ ├─实例33 如何播放DVD文件 │ │ ├─实例34 如何播放Flash文件 │ │ └─实例35 如何播放RealPlayer文件 │ ├─第3章 程序设置 │ │ ├─实例36 如何创建椭圆形窗体 │ │ ├─实例37 如何创建文字形窗体 │ │ ├─实例38 如何创建不规则窗体 │ │ ├─实例39 如何创建移动的窗体 │ │ ├─实例40 如何创建无标题栏窗体 │ │ ├─实例41 如何拖动无标题栏窗体 │ │ ├─实例42 如何制作自绘式菜单 │ │ ├─实例43 如何制作图形组合框 │ │ ├─实例44 如何设置窗体的透明度 │ │ ├─实例45 如何设置窗体启动位置 │ │ ├─实例46 如何设置窗体最前端显示 │ │ ├─实例47 如何实现精灵提示 │ │ ├─实例48 如何实现打印预览 │ │ ├─实例49 如何实现剪贴板循环 │ │ ├─实例50 如何实现菜单历史列表 │ │ ├─实例51 如何实现程序互斥运行 │ │ ├─实例52 如何屏蔽鼠标消息 │ │ ├─实例53 如何模拟键盘输入 │ │ ├─实例54 如何使用消息提示框 │ │ ├─实例55 如何使用系统API函数(INI) │ │ ├─实例56 如何获取和设置输入法 │ │ ├─实例57 如何在程序中启动其他程序 │ │ ├─实例58 如何在程序中关闭其他程序 │ │ ├─实例59 如何在开机时自动启动程序 │ │ ├─实例60 如何启动电话拨号程序 │ │ ├─实例61 如何启动屏幕保护程序 │ │ ├─实例62 如何启动系统控制面板程序 │ │ ├─实例63 如何编写多线程程序 │ │ ├─实例64 如何编写DLL服务端程序 │ │ ├─实例65 如何编写DLL客户端程序 │ │ ├─实例66 如何编写用户控件程序 │ │ └─实例67 如何给程序打包 │ ├─第4章 系统维护 │ │ ├─实例68 如何获取系统基本信息 │ │ ├─实例69 如何获取系统服务信息 │ │ ├─实例70 如何获取系统进程信息 │ │ ├─实例71 如何获取系统日期时间 │ │ ├─实例72 如何获取系统所有驱动器 │ │ ├─实例73 如何获取系统驱动器信息 │ │ ├─实例74 如何获取系统计数器信息 │ │ ├─实例75 如何获取操作系统版本信息 │ │ ├─实例76 如何获取系统特殊文件夹信息 │ │ ├─实例77 如何获取系统文化和国家信息 │ │ ├─实例78 如何获取系统已经安装的字体 │ │ ├─实例79 如何获取系统安装日期和启动时间 │ │ ├─实例80 如何获取CPU信息 │ │ ├─实例81 如何浏览注册表信息 │ │ ├─实例82 如何隐藏系统驱动器 │ │ ├─实例83 如何清理系统回收站 │ │ ├─实例84 如何制作日志查看器 │ │ ├─实例85 如何禁止关闭操作系统
书籍目录: 第1篇 Visual C#基础编程实例 实例1 C#经典程序--Hello World 实例2 C#的简单输入输出(I/O) 实例3 C#的复杂输入输出(I/O) 实例4 通信录管理与维护 实例5 文件与目录管理 实例6 用户界面上的“Hello,World!” 实例7 组件化“Welcome”程序 实例8 网络上的“Hello World” 实例9 Ref、Out与Params描述符的应用 实例10 C#自动内存管理的应用 实例11 一个有趣栈类的实现 实例12 垃圾收集器管理与应用 实例13 垃圾收集器算法控制与使用 实例14 调用栈记录异常点 实例15 使用C#异常的栈跟踪 实例16 运行期间检测变量类型 实例17 常用值类型的原型定义 实例18 打印杨辉三角形 实例19 比较学生信息 实例20 获取车辆信息 实例21 简单角色类游戏的制作 实例22 旅馆住宿登记情况表制作 实例23 长命名空间的应用 实例24 文件特征计数 实例25 文本框输入数据的验证 第2篇 Visual C#中级编程实例 实例26 窗体背景颜色动态变化 实例27 C#属性及应用 实例28 C#属性Metadata的管理与应用 实例29 使用Context属性创建CallThreshold Service 实例30 使用应用程序域 实例31 创建C#组件与客户应用程序 实例32 用OpenFileDialog类浏览或打开文件 实例33 在C#程序中获得Win32 API 实例34 从C#中调用COM组件 实例35 在C#程序中修改HTML文件标题 实例36 下载Web页面 实例37 创建多线程应用程序 实例38 多线程的多次加载 实例39 单个线程同步运行 实例40 多线程同步运行 实例41 线程Thread Relative Static跟踪与实现 实例42 线程池(ThreadPool)的应用 实例43 多线程互斥运行 实例44 多线程时钟应用程序 实例45 监视多线程 实例46 防止多线程应用程序死锁 实例47 文件同步操作与应用 实例48 在COM程序设计中使用.NET组件 实例49 文件异步操作与多处理器系统 实例50 获取网络主机IP地址 实例51 C#对话信息框的应用 实例52 在C#中快速调用Windows API 实例53 摄氏温度与华氏温度间相互转换(1) 实例54 摄氏温度与华氏温度间相互转换(2) 实例55 使用FileSystemWatcher组件监视Web服务器 实例56 由颜色名字产生对应颜色 实例57 使用索引指示器分析域名 实例58 C#版本的PingC 实例59 DNS客户程序 实例60 一个有趣的DOS实用程序 实例61 代表元基本应用 实例62 有趣的事件代表元 实例63 随机连续偶数发生事件处理 实例64 有趣的列表框窗体 实例65 数学函数应用 第3篇 Visual C#高级编程实例 实例66 文件夹中的文件列表 实例67 读写文本文件 实例68 读写二进制文件 实例69 显示系统日期与时间(1) 实例70 显示差值的日期与时间(2) 实例71 时钟发生器应用 实例72 在.NET程序设计中使用ATL 实例73 浏览Internet文件 实例74 在C#应用程序中打开浏览器 实例75 显示Internet文件信息 实例76 Puzzle游戏 实例77 MDI窗体菜单设计(1) 实例78 MDI窗体菜单设计(2) 实例79 创建一个C#编辑器 实例80 网络端口扫描器 实例81 深入WinForms-地址簿应用(1) 实例82 深入WinForms--Image Viewer应用程序(2) 实例83 开饭时间提醒器(Meal Reminder) 实例84 服务器端C#实例 实例85 数字时钟设计技术 实例86 自动编译C#程序AutoCompiler 实例87 使用C#与ASP+编写File Uploder 实例88 访问注册表中的硬件信息 实例89 设置“开始”菜单 实例90 在“新建”中添加自己的文件类型 实例91 显示Exchange软件的客户名称 实例92 读取Windows注册表信息 实例93 自定义AboutBox组件 实例94 自定义控件及应用 实例95 Java与C#混合编程的应用 实例96 C#与C++混合编程的应用 实例97 C#与VB混合编程的应用 实例98 C#组件与C#客户程序编程的应用 实例99 C#与XML联合应用XMLHelper 实例100 在C#中部署应用
目 录 第一章 开发环境 1.1 Qt 简介5 1.2 下载安装 Qt Creator 6 1.3 第一个程序 Hello World 7 第二章 窗体应用 1.1 窗体基类说明 12 1.2 控制窗体大小 13 1.3 窗体初始位置及背景色 13 1.4 修改标题栏图标 14 1.5 移动无边框窗体 16 1.6 去掉标题栏中最大化、最小化按钮 17 1.7 多窗体调用 18 1.8 字体形状窗体 20 第三章 控件应用 1.1 QPushButton按钮 23 1.2 QLabel标签 23 1.3 QLineEdit单行文本 24 1.4 QTextEdit多行文本 25 1.5 QPlainTextEdit多行文本 26 1.6 QComboBox下拉列表框 26 1.7 QFontComboBox字体下拉列表框 27 1.8 QSpinBox控件 28 1.9 QTimeEdit时间控件 29 1.10 QDateEdit日期控件 30 1.11 QScrollBar控件 30 1.12 QRadioButton单选按钮 31 1.13 QCheckBox复选框 32 1.14 QListView 列表控件 34 1.15 QTreeView树控件 34 1.16 QTableView表格控件 35 1.17 QHBoxLayout横向布局 36 1.18 QGridLayout网格布局 37 1.19 QGroupBox控件 38 1.20 QTabWidget控件 39 1.21 QMenu、QToolBar控件 41 1.22 任务栏托盘菜单 43 第四章 组件应用 1.1日历组件 47 1.2登录窗口 48 1.3文件浏览对话框 50 1.4颜色选择对话框 51 1.5进度条实例53 1.6Timer实时更新时间 54 第五章 文件操作 1.1创建文件夹 57 1.2写入文件 58 1.3修改文件内容 60 1.4删除文件 62 1.5修改文件名 63 1.6 INI文件写入操作 65 1.7 INI文件读取操作 68 1.8创建XML文件 71 1.9读取XML文件 72 第六章 图形图像操作 1.1绘制文字 75 1.2绘制线条 75 1.3绘制椭圆 77 1.4显示静态图像 78 1.5显示动态图像 78 1.6图片水平移动 79 1.7图片翻转 80 1.8图片缩放 82 1.9图片中加文字 84 1.10图像扭曲 85 1.11模糊效果 85 1.12着色效果 86 1.13阴影效果 87 1.14透明效果 87 第七章 多媒体应用 1.1音频、视频播放器 90 1.2播放Flash动画 94 1.3播放图片动画 95 第八章 系统操作 1.1获取屏幕分辨率 98 1.2获取本机名、IP地址 98 1.3根据网址获取IP地址 99 1.4判断键盘按下键值 100 1.5获取系统环境变量 101 1.6执行系统命令 102 第九章 注册表 1.0简要说明注册表 105 1.1写入注册表 105 1.2查找注册表 106 1.3修改IE浏览器的默认主页 107 第十章 数据库基础 1.1查询数据库驱动 109 1.2Qodbc连接Access数据库 109 1.3插入数据 111 1.4数据列表 112 1.5操作SQLite数据库 113 1.6SQLite数据库视图管理器 115 第十一章 网络开发 1.1点对点聊天服务端 119 1.2点对点聊天客户端 123 1.3局域网广播聊天 128 1.4SMTP协议发送邮件 148 1.5调用系统DLL判断网络连接状态 152 第十二章 进程与线程 1.1进程管理器 155 1.2线程QThread应用 158 1.3线程QRunnable应用 159 第十三章 数据安全 1.1 QByteArray加密数据 163 1.2 AES加密数据 164 1.3 MD5 加密数据 165 1.4 生成随机数 166 第十四章 打包部署 1.1 FilePacker 打包 169 1.2 Inno Setup 打包 174

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧