首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncCallback之后的异常

AsyncCallback之后的异常
EN

Stack Overflow用户
提问于 2012-11-15 09:03:11
回答 1查看 1.6K关注 0票数 0

我在AsyncCallback函数上遇到了问题。我正在使用一个来下载数据,然后无论我在那之后做什么,它都会抛出一个不同的异常。下面是一些代码:

代码语言:javascript
复制
private void downloadBtn_Click(object sender, RoutedEventArgs e)
{
    string fileName = System.IO.Path.GetFileName(Globals.CURRENT_PODCAST.Title.Replace(" ", string.Empty));
    MessageBox.Show("Download is starting");
    file = IsolatedStorageFile.GetUserStoreForApplication();
    streamToWriteTo = new IsolatedStorageFileStream(fileName, FileMode.Create, file);
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(Globals.CURRENT_PODCAST.Uri));
    request.AllowReadStreamBuffering = false;
    request.BeginGetResponse(new AsyncCallback(GetData), request);
}

private void GetData(IAsyncResult result)
{
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
    Stream str = response.GetResponseStream();
    byte[] data = new byte[16* 1024];
    long totalValue = response.ContentLength;
    while (str.Read(data, 0, data.Length) > 0)
    {
        if (streamToWriteTo.CanWrite)
            streamToWriteTo.Write(data, 0, data.Length);
        else
            MessageBox.Show("Could not write to stream");
    }
    streamToWriteTo.Close();
    MessageBox.Show("Download Finished");
}

有没有办法知道异步回调何时结束,然后运行代码而不会崩溃,或者我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-16 00:53:27

问题是您正在从线程池线程调用MessageBox.Show。您需要从UI线程调用它。为此,您需要与UI线程同步。例如:

代码语言:javascript
复制
this.Invoke((MethodInvoker) delegate
    { MessageBox.Show("success!"); });

Invoke的调用将在UI线程上执行代码。有关详细信息,请参阅Control.Invoke文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13390060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档