首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >死锁Windows 8- UI线程

死锁Windows 8- UI线程
EN

Stack Overflow用户
提问于 2015-04-13 18:47:42
回答 1查看 174关注 0票数 0

我有两个进程运行在我的UI线程上。但是,当我使用BeginGetStream功能运行第一个程序时,它进入循环并等待它的执行,并在您准备好时返回结果,但是在第二个运行中,通过BeginGetResponse功能,这个“死”在那里,程序不会继续,也不会返回我想要的值。在这些进程中使用IasynResult。

我试过:

  • 转换为任务(Task.Run)
  • 为进程分配一个新线程(Thread x= new ())
  • 设置参数ConfigureAwait (ConfigureAwait )( continueOnCapturedContext: false),ConfigureAwait (False);
  • 转换为异步的方法并应用“等待”
  • 使用AutoResetEvent等待进程完成,而不继续。
  • 将线程放置到睡眠(Thread.Sleep)
  • 使用Thread.Start,Thread.Join

一些代码示例:

第一次请求:

代码语言:javascript
复制
    int number = 123;
    1Request.Headers["Teste"] = string.Format("Teste{0}", number);
    IAsyncResult AsyncronousResult= null;

        try
        {
               await Task.Run(() => 1Request.BeginGetRequestStream(
               (IAsyncResult result) =>
               {
                   AsyncronousResult= result;
                   //handle.Set();
               }, 1Request));

            Task.WaitAny();

        }
        catch (Exception) { }

第二次请求:

代码语言:javascript
复制
    HttpWebRequest 2request = (HttpWebRequest)AsyncronousResult.AsyncState;
    IAsyncResult AsyncronousResult = null;

     Try 
    {
        await Task.Run(() => 2request.BeginGetResponse(
            (IAsyncResult result) =>
            {
                AsyncronousResult = result;

            }, 2request));
        Task.WaitAny();
    }

     catch
    {
    }

..。我不知道还能尝试什么..。有人能帮我。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-04-14 10:57:33

任何HttpWebRequest都需要一个免费的UI线程来完成请求,但是您可以通过调用Task.WaitAny()阻止UI线程。

您绝不能阻止UI线程,特别是等待web请求的结果!

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

https://stackoverflow.com/questions/29612797

复制
相关文章

相似问题

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