![]() |
1
2
如果您查看SetOut的实现,我认为它是线程安全的:
编辑我能想到的解决方案中最简单的一件事就是使用反射来获取他们的InternalSyncObject,然后锁定它。
您还需要注意任何service Pack和主要版本,确保内部变量仍在使用。由于它的内部版本,因此没有承诺它将在下一版本中出现。编写代码Defensively并尝试很好地降低用户体验,如果您不使用反射对象的话。 祝你好运:-) |
![]() |
2
1
请注意(在为.NET2.0提供的源代码中),Console类使用InternalSyncObject来保护Out和Error的初始化,并保护SetOut()和SetError(),但它不会在Out和Error的读取之前初始化后使用锁。这对于我的特殊情况已经足够了,但是如果你做了更复杂(和疯狂)的事情,可能会违反原子性;我想不出任何关于这个问题的有用方案,但可以想象得到。 |
![]() |
3
0
如果
|
![]() |
4
0
通常,我会使用安全模型来防止客户端代码在您不查看时重定向控制台。我确信这需要完全信任,所以如果客户端代码在部分信任的情况下运行,它将无法调用SetOut()。 |