C# 对象引用未设置为对象的实例-BaseStream.Seek

C# 对象引用未设置为对象的实例-BaseStream.Seek,c#,asynchronous,C#,Asynchronous,在下面的BaseStream.Seek代码中,我得到运行时错误NullReferenceException未被用户代码处理。对象引用未设置为对象的实例 我如何解决这个问题 public void GoButton_Click(object sender, System.EventArgs e) { IAsyncResult ar = DoSomethingAsync(strURL, strInput); Session["result"] = ar; Response.R

在下面的BaseStream.Seek代码中,我得到运行时错误NullReferenceException未被用户代码处理。对象引用未设置为对象的实例

我如何解决这个问题

public void GoButton_Click(object sender, System.EventArgs e)
{
    IAsyncResult ar = DoSomethingAsync(strURL, strInput);
    Session["result"] = ar;
    Response.Redirect("wait1.aspx");
}

private IAsyncResult DoSomethingAsync(string strURL, string strInput)
{
    DoSomethingDelegate doSomethingDelegate = new DoSomethingDelegate(DoSomething);
    IAsyncResult ar = doSomethingDelegate.BeginInvoke(strURL, strInput, new AsyncCallback(MyCallback), null);
    return ar;
}

private delegate void DoSomethingDelegate(string strURL, string strInput);

private void MyCallback(IAsyncResult ar)
{
    AsyncResult aResult = (AsyncResult)ar;
    DoSomethingDelegate doSomethingDelegate = (DoSomethingDelegate)aResult.AsyncDelegate;
    doSomethingDelegate.EndInvoke(ar);
}

private void DoSomething(string strURL, string strInput)
{
    int i = 0;
    for (i = 0; i < 1000; i++)
    {
        m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
        m_streamWriter.WriteLine("{0} ", MethodCall(strURL, strInput));
        m_streamWriter.Flush();
        m_streamWriter.Close();
    }
}
public void GoButton_单击(对象发送者,System.EventArgs e)
{
IAsyncResult ar=DoSomethingAsync(strURL,strInput);
会话[“结果”]=ar;
重定向(“wait1.aspx”);
}
专用IAsyncResult DoSomethingAsync(字符串strURL,字符串strInput)
{
DoSomethingDelegate DoSomethingDelegate=新的DoSomethingDelegate(DoSomething);
IAsyncResult ar=doSomethingDelegate.BeginInvoke(strURL,strInput,new AsyncCallback(MyCallback),null);
返回ar;
}
私有委托void DoSomethingDelegate(字符串strURL、字符串strInput);
私有无效MyCallback(IAsyncResult ar)
{
AsyncResult aResult=(AsyncResult)ar;
DoSomethingDelegate DoSomethingDelegate=(DoSomethingDelegate)aResult.AsyncDelegate;
EndInvoke(ar);
}
专用空位尺寸(字符串strURL、字符串strInput)
{
int i=0;
对于(i=0;i<1000;i++)
{
m_streamWriter.BaseStream.Seek(0,SeekOrigin.End);
m_streamWriter.WriteLine({0}),MethodCall(strURL,strInput));
m_streamWriter.Flush();
m_streamWriter.Close();
}
}

您正在关闭流,然后在for循环的下一次迭代中尝试对其调用Seek()-这看起来是一个很好的候选异常源

您正在尝试
查找
写入线
到一个关闭的流

编辑:哦,伊恩跑得更快。

for(i=0;i<1000;i++)
for (i = 0; i < 1000; i++) 
    { 
        m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); 
        m_streamWriter.WriteLine("{0} ", MethodCall(strURL, strInput)); 
    } 
    m_streamWriter.Flush(); 
    m_streamWriter.Close(); 
{ m_streamWriter.BaseStream.Seek(0,SeekOrigin.End); m_streamWriter.WriteLine({0}),MethodCall(strURL,strInput)); } m_streamWriter.Flush(); m_streamWriter.Close();

尝试将m_streamWriter.Close移出循环。

您在哪里设置m_streamWriter?我正在类的顶部初始化私有静态文件流fs=new FileStream(“c:\\Temp\\Data.txt”,FileMode.OpenOrCreate,FileAccess.Write);私有静态StreamWriter m_StreamWriter=新StreamWriter(fs);我不确定您到底想要实现什么,但是注释掉关闭流的行可以防止抛出异常