【发布时间】:2012-01-20 06:37:21
【问题描述】:
我在 Visual Studio 2008 框架 3.5 中有一个 Windows 应用程序, 我需要并发等待窗口,其中一个进程正在一个窗口中进行,并且在该窗口上出现另一个表单,其中包含一些移动图像(动画),就像 .gif 图像一样。
我有 2 个表单,在 form2 上,在单击按钮时我执行了一个漫长的过程, 我希望我的“frmWait”出现在屏幕上,而 form2 上的过程正在进行,完成后消失。当我的“frmWait”出现时,用户应该无法访问表单 2。
我的代码在这里。 表格2
在 SomeWork 过程中我写了一个 for 循环,但实际上在程序中它是在 sqlserver 中执行的数据库命令,当查询在服务器上执行时,我的主程序工作暂停,直到服务器完成工作,然后程序获得执行指针,同时,软件好像挂了。
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
frmWait fw = new frmWait("Wait...",0);
fw.Show();
SomeWork();
fw.Close();
}
private void SomeWork()
{
for (int x = 0; x < 99999999; x++)
{ }
}
}
}
【问题讨论】:
-
谢谢大家回复。但这里需要更多规范,在流程 SomeWork 和表单 Form2 上我无权访问,我可以访问 frmwait,此表单将是一种通用表单,任何人都需要等待,而长流程将在 15 人的团队中调用 frmwait程序员。
-
我想为此准备一个简单的解决方案,正在使用frmwait的程序员,他必须在工作前显示frmWait并在工作后关闭它。一些工作进程应该在主线程中,直到一些工作没有完成用户不能在应用程序中执行进一步的任务。
-
首先,您应该编辑您的问题,而不是添加评论。第二:不清楚。你的意思是你不能修改
button1_Click中的代码?那你想怎么解决这个问题呢? -
你想做的是糟糕的设计/架构。 3 人推荐了 BackgroundWorker。你不觉得值得研究吗?
-
对不起!对于不好的做法,我是新手,是的,我无法访问 button1_Click,当用户可以使用后台工作程序 form2 时,我希望 form2 应该停止直到进程完成,并且 frmwait 应该在进程进行时运行。
标签: c# winforms concurrency wait async-await