如何处理 WPF 中长时间运行的“线程”?

2023-12-02

晚上好!

目前我正在开发一个 wpf 客户端来提供一些休息服务。与休息服务的通信没有问题,并且是在额外的组件(通信接口)中完成的。

基本上:
我有一个执行方法的“搜索”按钮。此方法与服务通信,更新一些文本框和进度条(为用户提供一些图形信息,我们还有多远......)。 不幸的是,托管该服务的服务器有点蹩脚,导致响应时间很长(大约 4 秒)。另一方面,这会导致我的 wpf 应用程序等待,最终导致:变黑,并标题为“无响应”...

我已经尝试将此执行放在另一个线程中,但是...按逻辑,我将无法访问我的 wpf-window 的控件...

atm 我真的很无助......任何人都可以给我一些处理程序或解决方案吗?


您的 UI 线程正忙于等待 Web 服务的响应,无法绘制屏幕。一个不错的选择是将服务请求推送到另一个非 UI 线程。调查后台工作者,它是专门为使这变得简单而设计的。它处理从非 UI 线程到 UI 线程的跨线程调用的编组。

Roughly:

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync(arg);
...

static void bw_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = (BackgroundWorker)sender;
    int arg = (int)e.Argument;
    e.Result = CallWebService(arg, e);
}

static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBar.Increment();
}

static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    label.Text = "Done: " + e.Result.ToString();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 WPF 中长时间运行的“线程”? 的相关文章

随机推荐