【发布时间】:2013-12-14 01:49:36
【问题描述】:
我正在尝试将这些线程信息写入日志 - 例如线程编号/名称、开始日期时间等。
Thread[] threads = new Thread[10];
for (int i = 0; i < 10; i++)
{
threads[i] = new Thread(() =>
{
System.Threading.Thread.Sleep(4000);
ActualMethod(); //Goes here...
using (TextWriter tw = new StreamWriter("path of the file", true))
{
//Write to a text file...
}
});
threads[i].Start();
}
for (int i = 0; i < 10; i++)
{
threads[i].Join();
}
如果我尝试添加代码以写入线程代码内的文件(即 ActualMethod() 之后的行,我会得到跨线程异常 - 无法在线程外访问变量。
【问题讨论】:
-
在发布之前删除过多的缩进(大多数文本编辑器可以制表符/取消制表符)是一件“不错”的事情。
-
这就是为什么您使用日志框架而不是随便将内容写入文件的原因。
-
你确定“文件的路径”是一些明确的字符串值,而不是像
TextControl21.Text(或“写入文本文件..”部分)? -
@KirkWoll - 虽然日志框架确实很有用,但它可能无法解决问题。我相信异常与此处显示的代码无关,而是与隐藏在 cmets 中的代码有关。在任何线程上创建作家都很好......
-
@Sharpeye500 所以只需在线程主体内使用 Thread.CurrentThread.ManagedThreadId,您不需要访问线程[]
标签: c# .net multithreading thread-safety