写完的的小程序出现了假死问题

qq_35798892 2016-12-29 05:57:10
你好!我写了一个能够链接数据库且能够生成SQL语句的小程序,但是我把生成增删改查的处理都写在了一个点击事件里且让他生成.txt文档,问题是当读取的数据库表过多的时候就会出现程序的假死,需要1分钟才能反应过来,请问大神们有什么好的解决办法吗?
...全文
393 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35798892 2016-12-30
  • 打赏
  • 举报
回复
引用 11 楼 bigbaldy 的回复:
[quote=引用 9 楼 qq_35798892 的回复:] 你好,异步我名听说过,我刚接触.net,行做这个项目来了解下.net;还想请教一个问题,就是我看到 t = New Thread(AddressOf test) t.Start() 用这种方法能不能缓解页面假死的问题呢?
可以,但有以下两个问题: 1.Thread没有使用线程池 2.线程里的操作完成后也许需要返回结果,例如返回个操作成功的消息,如果你要操作的内容不在这个Thread线程中就需要invoke处理,所以建议使用async await,简单明了 [/quote] 你好,我想问一下在调用线程的方法中不能写For循环吗?例如: For Each dt As DataTable In form2DataSet2.Tables For Each dr1 As DataRow In dt.Rows 这个样子的,form2DataSet2的值我已近取到了,为什么没有走到循环里面呢?
qq_35798892 2016-12-30
  • 打赏
  • 举报
回复
引用 12 楼 hanjun0612 的回复:
[quote=引用 10 楼 qq_35798892 的回复:] [quote=引用 8 楼 hanjun0612 的回复:] 将生成txt放到异步去。
t = New Thread(AddressOf test) t.Start() 用这种方法能不能缓解页面假死的问题呢?异步不太了解....[/quote] 可以的。异步就是开一个线程,不阻塞主界面。 [/quote] 请问,能不能麻烦您提供一下vb.net的异步代码呢?我想了解一下
qq_35798892 2016-12-30
  • 打赏
  • 举报
回复
引用 11 楼 bigbaldy 的回复:
[quote=引用 9 楼 qq_35798892 的回复:] 你好,异步我名听说过,我刚接触.net,行做这个项目来了解下.net;还想请教一个问题,就是我看到 t = New Thread(AddressOf test) t.Start() 用这种方法能不能缓解页面假死的问题呢?
可以,但有以下两个问题: 1.Thread没有使用线程池 2.线程里的操作完成后也许需要返回结果,例如返回个操作成功的消息,如果你要操作的内容不在这个Thread线程中就需要invoke处理,所以建议使用async await,简单明了 [/quote] 你好,那我使用t = New Thread(AddressOf test) t.Start() 后出现一个问题就是Form1中文本框值已经获取到了,我估计是不是开一个新的线程导致之前已经获取到文本框的值在这个新的没有,那如何把Form1中文本矿的值传到这个新的线程里面呢?
正怒月神 2016-12-30
  • 打赏
  • 举报
回复
引用 10 楼 qq_35798892 的回复:
[quote=引用 8 楼 hanjun0612 的回复:] 将生成txt放到异步去。
t = New Thread(AddressOf test) t.Start() 用这种方法能不能缓解页面假死的问题呢?异步不太了解....[/quote] 可以的。异步就是开一个线程,不阻塞主界面。
bigbaldy 2016-12-30
  • 打赏
  • 举报
回复
引用 9 楼 qq_35798892 的回复:
你好,异步我名听说过,我刚接触.net,行做这个项目来了解下.net;还想请教一个问题,就是我看到 t = New Thread(AddressOf test) t.Start() 用这种方法能不能缓解页面假死的问题呢?
可以,但有以下两个问题: 1.Thread没有使用线程池 2.线程里的操作完成后也许需要返回结果,例如返回个操作成功的消息,如果你要操作的内容不在这个Thread线程中就需要invoke处理,所以建议使用async await,简单明了
qq_35798892 2016-12-30
  • 打赏
  • 举报
回复
引用 8 楼 hanjun0612 的回复:
将生成txt放到异步去。
t = New Thread(AddressOf test) t.Start() 用这种方法能不能缓解页面假死的问题呢?异步不太了解....
qq_35798892 2016-12-30
  • 打赏
  • 举报
回复
引用 7 楼 bigbaldy 的回复:

private async void button1_Click(object sender, EventArgs e)
{
    await Task.Run(() =>
    {
         //你的耗时操作
    });
    MessageBox.Show("生成完成");
}
[/quote [quote=引用 8 楼 hanjun0612 的回复:] 将生成txt放到异步去。
你好,异步我名听说过,我刚接触.net,行做这个项目来了解下.net;还想请教一个问题,就是我看到 t = New Thread(AddressOf test) t.Start() 用这种方法能不能缓解页面假死的问题呢?
正怒月神 2016-12-30
  • 打赏
  • 举报
回复
将生成txt放到异步去。
bigbaldy 2016-12-30
  • 打赏
  • 举报
回复

private async void button1_Click(object sender, EventArgs e)
{
    await Task.Run(() =>
    {
         //你的耗时操作
    });
    MessageBox.Show("生成完成");
}
qq_35798892 2016-12-30
  • 打赏
  • 举报
回复
引用 楼主 qq_35798892 的回复:
你好!我写了一个能够链接数据库且能够生成SQL语句的小程序,但是我把生成增删改查的处理都写在了一个点击事件里且让他生成.txt文档,问题是当读取的数据库表过多的时候就会出现程序的假死,需要1分钟才能反应过来,请问大神们有什么好的解决办法吗?
你好,线程方面还是不太了解,能否向你请教一下
qq_35798892 2016-12-29
  • 打赏
  • 举报
回复
引用 3 楼 以专业开发人员为伍的回复:
在子线程中,如果你要更新 UI 控件值,可以使用 BeginInvoke/Invoke 方式。如果不需要更新,那么你可以一直在子线程中执行完毕你的异步数据操作(生成 .txt 文档)。
你好,我是初学者不怎么太了解线程方面的问题
  • 打赏
  • 举报
回复
在子线程中,如果你要更新 UI 控件值,可以使用 BeginInvoke/Invoke 方式。如果不需要更新,那么你可以一直在子线程中执行完毕你的异步数据操作(生成 .txt 文档)。
  • 打赏
  • 举报
回复
你占用了 UI 线程。 简单的异步操作可以使用
ThreadPool.QueueUserWorkItem(h =>
{
    ....................
});
当然不嫌费事儿也可以定义 async 方法。
caoqinghua 2016-12-29
  • 打赏
  • 举报
回复
1.自己用多线程解决. 2.使用BackgroundWorker

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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