Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Phone 8.1 HTTP流死锁_C#_Asynchronous_Windows Phone 8.1_Linq To Twitter - Fatal编程技术网

C# Windows Phone 8.1 HTTP流死锁

C# Windows Phone 8.1 HTTP流死锁,c#,asynchronous,windows-phone-8.1,linq-to-twitter,C#,Asynchronous,Windows Phone 8.1,Linq To Twitter,以下代码适用于Windows Phone 8.0,但在Windows Phone 8.0上会死锁 int nextByte = stream.ReadByte(); 在Windows Phone 8.1中: /// <summary> /// Performs a query on the Twitter Stream. /// </summary> /// <param name="request">Request with

以下代码适用于Windows Phone 8.0,但在Windows Phone 8.0上会死锁

int nextByte = stream.ReadByte();
在Windows Phone 8.1中:

    /// <summary>
    /// Performs a query on the Twitter Stream.
    /// </summary>
    /// <param name="request">Request with url endpoint and all query parameters.</param>
    /// <returns>
    /// Caller expects an JSON formatted string response, but
    /// real response(s) with streams is fed to the callback.
    /// </returns>
    public async Task<string> QueryTwitterStreamAsync(Request request)
    {
        WriteLog(request.FullUrl, "QueryTwitterStreamAsync");

        var handler = new HttpClientHandler();
        if (Authorizer.Proxy != null && handler.SupportsProxy)
            handler.Proxy = Authorizer.Proxy;

        using (StreamingClient = new HttpClient(handler))
        {
            StreamingClient.Timeout = TimeSpan.FromMilliseconds(System.Threading.Timeout.Infinite);

            var httpRequest = new HttpRequestMessage(HttpMethod.Post, request.Endpoint);

            var parameters =
                string.Join("&",
                    (from parm in request.RequestParameters
                     select parm.Name + "=" + Url.PercentEncode(parm.Value))
                    .ToList());                            
            var content = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded");
            httpRequest.Content = content;

            var parms = request.RequestParameters
                              .ToDictionary(
                                   key => key.Name,
                                   val => val.Value);
            SetAuthorizationHeader(HttpMethod.Post, request.FullUrl, parms, httpRequest);
            httpRequest.Headers.Add("User-Agent", UserAgent);
            httpRequest.Headers.ExpectContinue = false;

            if (Authorizer.SupportsCompression)
                httpRequest.Headers.AcceptEncoding.TryParseAdd("gzip");

            var response = await StreamingClient.SendAsync(
                httpRequest, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);

            await TwitterErrorHandler.ThrowIfErrorAsync(response).ConfigureAwait(false);

            Stream stream = await CreateStream(response);

            const int CarriageReturn = 0x0D;
            const int LineFeed = 0x0A;
            var memStr = new MemoryStream();

            while (stream.CanRead && !IsStreamClosed)
            {
                **int nextByte = stream.ReadByte();**

                if (nextByte == -1) break;

                if (nextByte != CarriageReturn && nextByte != LineFeed)
                    memStr.WriteByte((byte)nextByte);

                if (nextByte == LineFeed)
                {
                    int byteCount = (int)memStr.Length;
                    byte[] tweetBytes = new byte[byteCount];

                    memStr.Position = 0;
                    await memStr.ReadAsync(tweetBytes, 0, byteCount).ConfigureAwait(false);

                    string tweet = Encoding.UTF8.GetString(tweetBytes, 0, byteCount);
                    var strmContent = new StreamContent(this, tweet);

                    await StreamingCallbackAsync(strmContent).ConfigureAwait(false);

                    memStr.Dispose();
                    memStr = new MemoryStream();
                }
            }
        }

        IsStreamClosed = false;

        return "{}";
    }

    async Task<Stream> CreateStream(HttpResponseMessage response)
    {
        var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

        if (Authorizer.SupportsCompression)
            return new GZipStream(stream, CompressionMode.Decompress);
        else
            return stream;
    }
这来自我的开源项目LINQ to Twitter,网址:


这不再是一个问题,主要由OBE事件接管。我不再把Windows8.1作为流媒体支持的目标,而是转向Windows10,它引入了一种新的技术。使用新的HttpClient,流媒体可以在我的所有模拟器和Windows 10设备上完美运行。

检查您是否没有面临缓存问题。在整个文件被下载之前,我无法读取一个字节。