c# 调用异步网络请求,返回结果后无法更新UI
思路是这样的:
界面类实现一个接口,接口中定义了统一方法,用作异步网络请求完成后的回调方法.
然后,
界面点击按钮,调用网络请求,网络请求开始处理,处理完成后,调用回调方法.
问题出现在:在回调方法中,可以用MessageBox输出返回的值,但就是没法设置到文本框,试过好几个方法都还是不行,谢谢大神帮忙看一下.
窗口:
回调接口(实现类(指窗口类)中实现具体的回调方法):
网络请求模拟(此处并没有真正请求网络.只是模拟了一下场景)
想要实现的效果是,将返回的结果值,设置到文本框中.
界面效果:

谢谢.
界面类实现一个接口,接口中定义了统一方法,用作异步网络请求完成后的回调方法.
然后,
界面点击按钮,调用网络请求,网络请求开始处理,处理完成后,调用回调方法.
问题出现在:在回调方法中,可以用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无法更新,出现假死现象。
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. 异步编程模型: - 回调函数:早期的异步编程常用回调函数,即在任务完成后调用指定的函数。


