C# 代码在网络流之后挂起。读取

C# 代码在网络流之后挂起。读取,c#,asp.net,xml,C#,Asp.net,Xml,我正在尝试通过代码连接到打印机,然后在打印机上应用安全设置。在应用安全功能之前,它会检查以下代码模块中的密码。代码挂在该行之后 stream.Flush() 我需要做什么才能使这段代码工作。Stream.Read()阻塞,直到有字节可供读取。如果您不想这样做,您需要更改读取模式。您能在stream上设置一个断点吗。写入并告诉我们数据的值是什么?stream是什么类型的?什么是dataResponse?它有9个随机数,在我执行该行并再次尝试添加watch后,它表示表达式已计算且没有值。并且在执行行

我正在尝试通过代码连接到打印机,然后在打印机上应用安全设置。在应用安全功能之前,它会检查以下代码模块中的密码。代码挂在该行之后

stream.Flush()


我需要做什么才能使这段代码工作。

Stream.Read()阻塞,直到有字节可供读取。如果您不想这样做,您需要更改读取模式。

您能在stream上设置一个断点吗。写入并告诉我们数据的值是什么?stream是什么类型的?什么是
dataResponse
?它有9个随机数,在我执行该行并再次尝试添加watch后,它表示表达式已计算且没有值。并且在执行行bytes=stream.Read(dataResponse,0,dataResponse.Length)后,代码挂起;流定义为NetworkStream stream=null,dataresponse为Byte[]dataresponse=new Byte[1024];与大多数流非常相似,通常情况下,大多数流都支持Stream.DataAvailable()方法,该方法检查是否有数据要从流中读取。如果没有数据,则可以通过read()进行阻塞,直到有数据为止,或者在再次使用DataAvailable()进行测试之前循环并执行其他操作。通常,阻塞不是问题,因为读取与主程序线程位于不同的线程上。@根据以下Microsoft文档(请参阅备注部分),如果流中没有任何内容,我希望Read()返回0:“如果没有可读取的数据,Read方法返回0。”我想这只是在第一次成功阅读之后。无论如何,你的帖子对理解这一点很有帮助——使用DataAvailable标志帮助了我。
if (responseStr.IndexOf(PrinterSecurityConstants.NewPrinterPass) > 0)
{
    LogUtility.Info(PrinterSecurityConstants.ValidateUserNamePassword);

    data = System.Text.Encoding.ASCII.GetBytes(
        ConfigurationManager.AppSettings[PrinterSecurityConstants.CurrentPass]
        .ToLower() + CommonConstant.Carriagereturn);
    stream.Write(data, 0, data.Length);
    stream.Flush();
    bytes = stream.Read(dataResponse, 0, dataResponse.Length);
    responseStr = System.Text.Encoding.ASCII.GetString(dataResponse, 0, bytes);
}