如何在程序运行时让我的VB GUI不冻结?

时间:2014-08-01 18:55:16

标签: vb.net visual-studio-2012 user-interface vb6 refresh

我正在使用VB在Visual Studio 2012中编写一个程序,它打开并调整非常大的Excel文件,但是从GUI开始,允许用户选择文件的位置和数据来自的文件。我还添加了一个进度条和一个文本框来显示进度,因为它有助于查看问题出现的位置并显示实际发生的事情。

不幸的是,尽管这些部分和代码已经到位,但是一旦程序开始运行,它就会冻结,既不会显示也不会输入任何内容。在程序结束时(一旦成功完成),您可以看到一切都按预期进行,并且已输入。这是一个单独的类,因为它是一个相当简单的应用程序。

我尝试添加System.Threading.Thread.Sleep(1000),希望暂停允许程序随时更新。不幸的是,这种情况并非如此。如何使程序减速足够长的时间以通过视觉更新?

1 个答案:

答案 0 :(得分:4)

您要做的是为Excel处理创建一个单独的线程。

http://msdn.microsoft.com/en-us/library/btky721f.aspx

编辑:

VB6中的线程文档(没有看到你的VB6标签,发布这个以防万一)

http://msdn.microsoft.com/en-us/library/aa719109%28v=vs.71%29.aspx

<强>为什么吗

你的主窗口是它自己的一个线程,所有的绘图和更新都在这个线程中完成。如果一段代码需要一段时间才能执行,整个线程将被阻塞,等待此代码完成执行,因此,应用程序上不会刷新任何内容

现在,Thread.Sleep(1000)调用只是冻结你的主窗口再多一次

通过为Excel处理创建单独的线程,您现在可以释放主窗口,以便用户可以在完成任务时继续输入。

相关问题