我会尽力描述我需要知道的事情。我使用C#(WPF .NET 4),使用BlockingCollection进行多线程处理。线程包含无限循环,所以它们永远不会死亡,它们轮流进行(1st - 2nd - 1st - 2nd
等)。当每个线程都处于活动状态时,它会在我的GUI中显示"线程X处于活动状态"。
现在,我的GUI上有几个按钮,但是当我点击randomButton
时,它会从thread 1
和thread 2
调用相同的方法。
如何才能使它只调用活动线程中的方法?有没有办法在我的线程中写一些基本上说"如果这个线程处于活动状态,按钮只会影响这个线程"?
答案 0 :(得分:0)
我认为你对线程有误解。
让我们定义一个线程:
<强>发强>
线程是进程中可以安排执行的实体。进程的所有线程共享其虚拟地址空间和系统资源。此外,每个线程都维护异常处理程序,调度优先级,线程本地存储,唯一线程标识符以及系统将用于保存线程上下文直到调度的一组结构。线程上下文包括线程的机器寄存器集,内核堆栈,线程环境块和线程进程的地址空间中的用户堆栈。线程也可以有自己的安全上下文,可用于模拟客户端。
当您在应用程序中的Thread
内运行方法时,可能是Background Thread
或Foreground Thread
,您正在执行与应用程序并行的工作单元{{ 1}},在您的情况下是GUI的Main Thread
。
“
UI Thread
”
当你启动How can I make it so it calls only the method from the active thread?
时,它会一直运行直到它完成执行(通过完成工作或因异常或线程中止而终止)。因此,当您同时启动多个线程时,调用相同的方法,它们将同时运行它,因为它们都是活动的
您可以使用Concurrent Collections
来访问多线程环境中的集合