在循环中调用函数时,Invoke required不为真

本文关键字:required Invoke 循环 调用 函数 | 更新日期: 2023-09-27 18:16:47

我有一个奇怪的问题。我有以下代码在我的函数:

if (this.InvokeRequired)
{
    this.BeginInvoke((MethodInvoker)delegate
    {
        LoadGamesAndRefreshView();
    });
    return;
}
presenter.LoadGames();
presenter.ApplyFilter();

呈现器方法present . applyfilter()调用View来更新UI元素。

发布的代码(函数)是在WCF上调用的,所以从不同的线程,所以我必须调用这个。这工作得很好,但我有时必须在循环中调用这个函数,所以在WCF上大约有15-20次调用这个函数。当我这样做的时候,我的客户端崩溃了,因为它在错误的线程中,不能改变UI元素。

服务器为每个函数创建自己的线程

在循环中调用函数时,Invoke required不为真

这应该可以解决您的问题。
您必须检查演示者是否需要调用。

    void LoadGamesAndRefreshView()
    {
        if (presenter.InvokeRequired)
        {
            this.BeginInvoke((MethodInvoker)Delegate
            {
                LoadGamesAndRefreshView();
            });
            return;
        }
        presenter.LoadGames();
        presenter.ApplyFilter();
    }