【发布时间】:2014-07-03 10:14:09
【问题描述】:
我有一个 Windows 窗体应用程序,它应该在系统上执行多项任务,例如拍摄桌面快照、查找可用磁盘空间、弹出消息、创建文件等等。
我的问题是,由于我有多个任务,其中一个正在弹出消息,我想知道如何在不中断其他任务执行的情况下实现这一目标。即我有 for 循环,其中所有任务都被一个接一个地执行,当涉及到消息任务时,它等待消息框关闭,并且除非消息框关闭,否则不会继续执行下一个任务。
这里是代码sn-p:
foreach (string str in Processqueue)
{
switch (str)
{
case "DISKSPACE": DiskSpace();
break;
case "MESSAGE": Message();
break;
case "SCREENSHOT": Screenshot();
break;
}
}
这里的Processqueue是字符串数组。
做了一些研究,看来我需要为此使用不同的线程。我是Winform的新手,谁能帮忙。
我不需要在现有表单中打开新表单。我需要打开新表单(仅用于消息任务)并在后台在主表单上执行其他剩余任务。
【问题讨论】:
-
我不确定我是否正确理解了您的问题,但在深入研究多线程之前,您可以查看(如果您还没有)
Multiple-Document Interface (MDI) Windows Forms。一般来说,这允许您拥有一个parent form和多个child forms,也许您可以为每个要执行的任务使用不同的child form。不确定这是否会对您有所帮助,但我认为如果您快速浏览一下可能会有所帮助。 -
好,我去看看MDI。
-
我认为 MDI 不会有太大帮助,除非子窗口不共享相同的 UI 线程。
-
只是为了澄清我没有针对每个任务的多个表单。它仅用于消息任务,我需要一个单独的表单或一个不会中断其他任务的消息框。
-
离题:1. 我知道你没有要求,但我可以在这里谦虚地做一个小小的代码审查吗?我建议您用适当的多态性替换整个
switch块:即在您的ProcessQueue类上定义类似Run的方法,然后只执行foreach (var process in processQueue) { process.Run(); }2. 考虑重命名 @ 987654330@ 至Process。foreach (ProcessQueue process in processQueue)听起来不合逻辑恕我直言:为什么类型称为ProcessQueue,而变量process?为什么你可以遍历processQueue并再次检索ProcessQueue对象?
标签: c# multithreading winforms