我在http://www.dotnetspark.com/kb/1867-create-tab-control-wpf.aspx上遵循了本教程,为WPF应用程序创建了可关闭的选项卡。
我正在创建一个多线程应用程序,我将使用上面链接中的可关闭选项卡。我希望每个线程都有自己的选项卡,并在运行时更新它。我应该在新线程内创建选项卡还是在主线程中创建选项卡并从新线程更新它?这样做的正确方法是什么?
如何在标签关闭时使线程结束?
问候!
答案 0 :(得分:1)
答案 1 :(得分:1)
都不是。让主线程创建选项卡,在各种其他线程指示时更新选项卡,并在关闭选项卡时命令线程终止。
了解如何use the dispatcher协调线程。
如果一个线程做了一些工作,那么程序逻辑不应该在那个时候完成,那个线程的代码就会被破坏。修理它。如果在关闭选项卡时线程不应继续运行,则在关闭选项卡时将其编码为不继续运行。当程序逻辑不能完成该工作时,不要让线程断开,编码以便工作,然后尝试在其他地方修复它。
这是一种思考线程的倒退方式。线程只是工作的车辆。你可以通过控制工作来控制它们。您编写线程执行的每一行代码。如果您不希望在条件Y中将线程设置为X,则将其编码为不在条件Y中执行X.
总而言之,如果程序逻辑说明当标签Y关闭时不应该完成工作X,请执行以下操作:
1)在某处,存储一个标志,指示是否应该完成工作X.
2)在运行X的代码中,检查此标志。如果设置为否,请不要执行此操作。通过程序逻辑,不应该完成工作。这样做是破解。
3)当选项卡关闭时,让UI线程设置标志以停止工作X。
标签不应与线程对应。这没有逻辑意义。选项卡应与选项卡中显示的内容相对应。 (它们可能“碰巧”间接对应于线程,但这不是主要的。线程实际上对应于与选项卡关联的任何工作。)
原则上,如果一个不同的线程接管同一个工作,它不应该仍然在同一个标签中吗?或者,相同的数据是否突然进入不同的选项卡只是因为不同的线程正在产生它?您碰巧总是在同一个线程中的该选项卡中执行的工作是一个实现细节,应该不在架构中以这种方式反映出来。正如您所了解的那样,这只会造成愚蠢,您必须在不关心的情况下弄清楚哪个线程正在进行工作。