c# 调用异步网络请求,返回结果后无法更新UI

student-ai student-ai 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
思路是这样的:

界面类实现一个接口,接口中定义了统一方法,用作异步网络请求完成后的回调方法.

然后,

界面点击按钮,调用网络请求,网络请求开始处理,处理完成后,调用回调方法.

问题出现在:在回调方法中,可以用MessageBox输出返回的值,但就是没法设置到文本框,试过好几个方法都还是不行,谢谢大神帮忙看一下.


窗口:

using System;
using System.Windows.Forms;

namespace ASyncUpdateUI
{
public partial class Form1 : Form, FormInterface
{
public Form1()
{
InitializeComponent();
}

void FormInterface.SendResult(string text)
{
// 调用返回的数据.
// 在这里更新UI,更新不到.
// 但是可以弹出.
MessageBox.Show(text);


// !!!!!!
// 下面这一句设置失败
// TODO
this.targetText.Text = text;
}

private void send_Click(object sender, EventArgs e)
{
SendHTTP send = new SendHTTP();
send.SendGet("http://www.baidu.com", new Form1());

}
}
}



回调接口(实现类(指窗口类)中实现具体的回调方法):

namespace ASyncUpdateUI
{
interface FormInterface
{

void SendResult(string text);

}
}



网络请求模拟(此处并没有真正请求网络.只是模拟了一下场景)

using System;
namespace ASyncUpdateUI
{
class SendHTTP
{

public void SendGet(string url,FormInterface formInterface)
{
// 模拟异步网络请求.
// .......................


// 返回网络请求结果.
//
string result = "ok";
formInterface.SendResult(result);
}
}
}




想要实现的效果是,将返回的结果值,设置到文本框中.


void FormInterface.SendResult(string text)
{
// 调用返回的数据.
// 在这里更新UI,更新不到.
// 但是可以弹出.
MessageBox.Show(text);


// !!!!!!
// 下面这一句设置失败
// 从这怎么才能成功设置值到文本框中?
this.targetText.Text = text;
}




界面效果:



谢谢.
...全文

相关推荐

使用异步处理的WPF应用程序的响应UI

在WPF中,主线程负责处理用户交互,如果执行耗时的操作,如网络请求或大型数据计算,主线程会被占用,导致UI无法更新,出现假死现象。

weixin_38705699

C#异步编程及UI更新实战教程

在深入讨论如何实现进度条的更新之前,我们先来探讨自定义异步操作的实现。在.NET 4.0之前,开发者通常会使用ThreadPool或者Thread类手动管理线程。然而,从.NET 4.0开始,Task成为了处理异步操作的首选。在现代应用设计中,事件驱动模型是一种流行的编程范式,尤其适用于响应用户操作或系统事件的场景。这种模型的优势在于,它允许应用程序以松耦合的方式进行响应,提高了应用的可维护性和可扩展性。

贫僧法号止尘

异步MVVM助手:基于C#的高效UI架构设计与实战

功能传统方式痛点Rx 解决方案防抖搜索手动定时器,易遗漏清除自动处理多源联动多个 PropertyChanged 事件监听WhenAny声明式组合异常传播try/catch 分散各处统一OnError通道资源清理忘记取消订阅导致内存泄漏使用集中管理关键洞察:Rx 并非要取代Task,而是在更高层次上构建可组合、可测试、可推理的状态转换管道。它特别适用于那些“状态随外部输入不断演化”的复杂交互场景。

姜俭

C#的BackgroundWorker控件

在C#编程中,当进行诸如文件操作、数据库查询或网络通信等耗时操作时,如果这些操作在主线程(UI线程)上执行,会导致程序界面冻结,用户无法进行其他交互。

捡破烂攻城狮

异步:异步

- UI更新:在用户界面中,异步更新可以确保UI始终对用户保持响应,避免因长时间计算导致的界面卡顿。3. 异步编程模型: - 回调函数:早期的异步编程常用回调函数,即在任务完成后调用指定的函数。

婉君 喜欢DIY
评论 15
收藏 已收藏
分享
返回顶部
student-ai
C# 111,128 成员 642,537 内容