如果调用线程不是创建该对象的线程,则抛出异常

时间:2016-06-21 11:38:02

标签: c# multithreading

我想创建自定义类的实例。例如,我有两个帖子T1T2。如果我从T1创建实例,则从T2对该实例的任何访问都应该抛出异常。就像在WinForms中一样,当我尝试从不是UI线程的线程进行访问控制时。

如何实现这一目标?我应该存储对current thread的引用还是应该保留当前线程的unique ID个? (如果该ID存在)。我使用哪种机制?

基本上它将是一个单一的,从给定的种子生成随机数。我想阻止从其他线程访问这个单例,因为我需要使用相同的种子再次运行我的应用程序来重现我的场景。如果我将从其他线程中使用此类,则无法再现,因为线程以不可预测的顺序启动/停止/执行操作。

1 个答案:

答案 0 :(得分:3)

我认为您可以将Thread.CurrentThread.ManagedThreadId用于此目的。

但请注意,这些ID可能会在某个时间重复使用,因此在应用程序的整个生命周期内它们可能不是唯一的。但是,考虑到您所描述的情景,我认为这不应成为问题。

此外,您需要注意,您的“防护”可能无法与异步编码配合使用,具体取决于使用方式和位置。