0

我正在创建一个“调试/日志”文本文件,以尝试查看当我正在处理的应用程序挂起时哪些“后台线程”正在运行。

首先,当它们被激活时,我将它们存储在 StringBuilder 中:

public static StringBuilder ActiveBackgroundThreads = new StringBuilder();

有很多(近 50 个)“后台线程”(所以最初的开发人员将它们命名为它们,尽管我不确定它们是否真的如此)可以打开和关闭,我已经在 StringBuilder 中添加了这些内容,像这样:

private void InitializeBackgroundThread_PDALoginTerminate( bool add )
{
    try
    {
        if ( add )  
        {
            pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
            SSCS.ActiveBackgroundThreads.Append("DeinitLoginDialogs\r\n");
        }
        else
        {
            pc.PDALoginTerminate -= new PendingCommands.PDALoginTerminateEventHandler( DeinitLoginDialogs );
            SSCS.ActiveBackgroundThreads.Replace("DeinitLoginDialogs\r\n", "");
        }
    . . .

...我终于(一旦我到达挂起之前代码中的最后一个位置)将 StringBuilder 内容写入文本文件,或者尝试:

StreamWriter file = new StreamWriter(@"\hereIAm.txt");
file.WriteLine(SSCS.ActiveBackgroundThreads.ToString());

...然而,当我打开该文件(它确实被创建)时,它里面什么都没有(0 字节)。我知道其中一些 InitializeBackgroundThread_* 方法正在被调用;在写入文件之前,每个开始的人都有可能停止,但我非常怀疑......

4

1 回答 1

3

Close()编写器或(更好)将其放入using语句中。

using(StreamWriter file = new StreamWriter(@"\hereIAm.txt"))
{
    file.WriteLine(SSCS.ActiveBackgroundThreads.ToString());
}
于 2013-03-19T15:28:27.453 回答