MVVM 中的多线程/用户反馈

发布于 2024-09-30 02:43:03 字数 1039 浏览 5 评论 0原文

我是 MVVM 新手,编写了一个小应用程序来测试水域并熟悉该模式。我的应用程序的主要功能花费的时间太长,以至于没有某种用户反馈表明该过程正在继续。将调用置于单独的线程中并为进度条提供反馈的推荐方法是什么?该函数的 ViewModel 代码如下。感谢您的帮助。

public DataView Data
        {
            get
            {
                return resultsView;
            }
            set
            {
                if (value == resultsView)
                {
                    return;
                }
            resultsView = value;

            RaisePropertyChanged("Data");
        }
    }

    private void SetData()
    {
        Data = RetrieveData.GetPartData(SelectedTeam, SelectedYear).DefaultView;
    }

    public RelayCommand GetData
    {
        get;
        private set;
    }

    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel()
    {
        // Initializers for other part of ViewModel
        // Teams = RetrieveData.GetTeams();
        // Years = RetrieveData.GetYears();

        GetData = new RelayCommand(SetData);
    }

I am new to MVVM and have written a small app to test the waters and get familiar with the pattern. The main function of my app takes too long to not have some sort of user feedback that the process is continuing along. What would be the recommended way to place the call in a separate thread and provide feedback for a progress bar? The ViewModel code for the function is below. Thanks for the help.

public DataView Data
        {
            get
            {
                return resultsView;
            }
            set
            {
                if (value == resultsView)
                {
                    return;
                }
            resultsView = value;

            RaisePropertyChanged("Data");
        }
    }

    private void SetData()
    {
        Data = RetrieveData.GetPartData(SelectedTeam, SelectedYear).DefaultView;
    }

    public RelayCommand GetData
    {
        get;
        private set;
    }

    /// <summary>
    /// Initializes a new instance of the MainViewModel class.
    /// </summary>
    public MainViewModel()
    {
        // Initializers for other part of ViewModel
        // Teams = RetrieveData.GetTeams();
        // Years = RetrieveData.GetYears();

        GetData = new RelayCommand(SetData);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陈独秀 2024-10-07 02:43:03

我还没有完全熟悉 MVVM 多线程,但这个链接似乎相当可行: WPF 多线程:使用 BackgroundWorker 并向 UI 报告进度。
现在,我要尝试的是这样的:

worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
   Data = RetrieveData.GetPartData(SelectedTeam, SelectedYear).DefaultView;
};

I'm not completely versed on MVVM multi-threading yet, but this link seems quite do-able : WPF Multithreading: Using the BackgroundWorker and Reporting the Progress to the UI.
NOW, what I would try is something like this:

worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
   Data = RetrieveData.GetPartData(SelectedTeam, SelectedYear).DefaultView;
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文