WinForm中出现窗体未响应,程序锁死解决办法
2015-04-30 10:51
225 查看
这是由于Winform中常常都是拖控件导致的,服务器加载时缓慢。因为如果你的线程多了,那么当两个线程同时尝试将一个控件变为自己需要的状态时,线程的死锁就会发生。但是难道就是因为这个原因,我们就只能让程序卡着么?当然不是,这里教大家一个解决方案:此时应考虑使用异步加载的办法,用BackGroundWorke。
使用方法如下:
1.在工具箱中找到 所有Windows窗体,找到BackGroundWorke,拖于界面上
2.点击事件图标,添加两个事件Dowork和RunWorkerCompleted 如:bgwWork_DoWork和bgwWork_RunWorkerCompleted
3.在bgwWork_DoWork事件中填执行SQL语句的代码,特别注意,此事件中不要出现任何相关于服务器控件的操作,可事先把服务器控件的值赋给参数,然后传参数进来如下:
private void bgwWork_DoWork(object sender, DoWorkEventArgs e)
{
//poNum, startTime, endTime, wuliaoNum, storeName 通过服务器控件赋值后的参数
SMS.OdateBa.oDataOperate od = new SMS.OdateBa.oDataOperate();
tb = od.Re_MM_PO(poNum, startTime, endTime, wuliaoNum, storeName);
}
4.在bgwWork_RunWorkerCompleted进行绑定操作如下:
private void bgwWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dgvPInfo.DataSource = tb;
dgvPInfo.Rows[dgvPInfo.Rows.Count - 1].Selected = true;
}
5.调用此异步加载方法
如果是在按钮事件中则如下:
try
{
bgwWork.RunWorkerAsync();//异步调用 此处若反复点击按钮多次会出现 当前正忙,无法同时运行多个任务的异常
}
catch (Exception)
{
MessageBox.Show("正在加载,请稍候!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
使用方法如下:
1.在工具箱中找到 所有Windows窗体,找到BackGroundWorke,拖于界面上
2.点击事件图标,添加两个事件Dowork和RunWorkerCompleted 如:bgwWork_DoWork和bgwWork_RunWorkerCompleted
3.在bgwWork_DoWork事件中填执行SQL语句的代码,特别注意,此事件中不要出现任何相关于服务器控件的操作,可事先把服务器控件的值赋给参数,然后传参数进来如下:
private void bgwWork_DoWork(object sender, DoWorkEventArgs e)
{
//poNum, startTime, endTime, wuliaoNum, storeName 通过服务器控件赋值后的参数
SMS.OdateBa.oDataOperate od = new SMS.OdateBa.oDataOperate();
tb = od.Re_MM_PO(poNum, startTime, endTime, wuliaoNum, storeName);
}
4.在bgwWork_RunWorkerCompleted进行绑定操作如下:
private void bgwWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dgvPInfo.DataSource = tb;
dgvPInfo.Rows[dgvPInfo.Rows.Count - 1].Selected = true;
}
5.调用此异步加载方法
如果是在按钮事件中则如下:
try
{
bgwWork.RunWorkerAsync();//异步调用 此处若反复点击按钮多次会出现 当前正忙,无法同时运行多个任务的异常
}
catch (Exception)
{
MessageBox.Show("正在加载,请稍候!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
相关文章推荐
- C#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
- c#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
- 打开office出现错误:向程序发送命令时出现问题 无法更改 中注册的office 加载项的连接状态 解决办法
- 引用dll时出现“试图加载格式不正确的程序”,解决办法
- 使用Visual Studio Development Server开发域验证程序时出现HTTP Error 403 - Forbidden错误的解决办法
- 关于Java web程序中出现Server Tomcat v8.0 Server at localhost failed to start.的问题解决办法
- IIS安装出现“安装程序无法复制文件CONVLOG.EX_”的解决办法
- 程序出现(LaunchServicesError error 0)的解决办法参考
- 当点击onBackpress方法或者onKeyDown方法时出现不能响应的问题解决办法
- 【ASP.NET 问题】IIS发布网站后出现 "处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误"的解决办法
- SQL2000安装过程中出现“以前进行的程序创建了挂起的文件操作,运行安装程序前,必须重新启动”的解决办法
- 程序中两个Double类型相加出现误差的解决办法
- 关于电脑服务打开时出现选择打开程序时的解决办法
- 安装的qt 运行程序出现错误 解决办法
- VS中使用VC资源编辑器添加变量或事件处理程序出现脚本错误的解决办法
- IIS运行ASP程序出现Server Application Error的解决办法
- SWT中定时器的一种特殊实现方式/SWT中线程互访时display.asyncExec/display.syncExec...程序死掉无响应的解决办法
- XP下安装Sql2000出现“安装程序配置服务器失败”时的解决办法
- WIn7系统下 打开.exe程序出现已停止工作关闭程序之解决办法
- C# Winform MDI窗体,父窗体控件覆盖子窗体的解决办法