【发布时间】:2012-09-05 02:46:45
【问题描述】:
我有一个带有列表视图的表单,用户也可以添加任务。然后用户可以单击一个按钮,然后应用程序会逐个执行列表视图中的每个任务。
这些任务更像是实际完成任务的指令。我通过在其中创建一个循环的类来执行此操作,该循环遍历每个项目,然后它完成我为每个项目(指令)设置的任务。为了开始解析,我在调用该函数的表单上有一个按钮。 IE: RunTask(listview1, 1) - 基本上所有这些都启动了我在课堂上的循环,指定了列表视图和要从哪个项目开始。
除了屏幕锁定外,一切都很完美,所以我无法实现停止功能来阻止应用程序解析这些列表视图项。我只是不明白如何在没有交叉线程的情况下实现这一点,因为我想单独运行的线程将始终访问此列表视图。重新设计程序以摆脱列表视图是不可行的。我尝试了 application.doevents 虽然它引起了太多人的错误。我一直在研究如何解决这个问题,但我不知道。希望有人能有所启发。
另外我已经添加了一个后台工作人员来解决这个问题,虽然我显然必须设置 checkforillegalcrossthreadcalls = false 并且我知道这并不聪明。
【问题讨论】:
-
从视图中分离数据。没有理由需要 ListView 来存储数据,它不是设计为集合对象。
-
唯一的事情是我也将信息存储在列表视图项目标签中。我还设置了它,所以我可以暂停它,通过在单击暂停按钮时执行此操作,它会选择当前项目。然后,当再次点击播放按钮时,它会检查是否选择了项目,如果是,则从该项目开始。它还有一些直接使用列表视图的其他功能,我认为标准列表无法实现这些功能。感谢您的意见。
标签: vb.net multithreading visual-studio-2010 backgroundworker