synchronizacja funkcji asynchronicznej z widokiem

0

Witam . Próbuje wczytać dane z bazy danych w osobnym wątku, ale przy tak napisanej funkcji widok się nie odświeża Wydaje mi się że odziany wątek nie synchronizuję się poprawnie z wątkiem głównym widoku. Jak powinienem poprawnie zdefiniować tą funkcję.

    private void refreshtablewithproperties()
        {
            Task.Run(async () =>
            {
                CurrentDataTable = await _baza.Dostawcy_widok("");

            }).ContinueWith((arg) =>
            {
                
                OnPropertyChanged(nameof(CurrentDataTable));
            });
        }

Proszę o podpowiedź

1

Napisz ten sam kod tylko synchronicznie i sprawdź czy działa, bo istnieje duże prawdopodobieństwo że to wcale nie w asynchroniczności leży problem, a już na pewno nie w podanym przez Ciebie fragmencie kodu.

0

nie sądzę gdyż :
gdy w konstruktorze wywołuje funkcje asynchronicznie w modelu widoku zanim jeszcze on zostanie podpięty do DatacContextu ta synchroniczna metoda wszytko wczytuje dobrze

//code behind
     public Dostawcy(TrybOkna tryb) : this ()
        {
            mv = new DostawcyPrzestrzen.Dostawcy1(tryb);
            this.DataContext = mv;
        }
mv
 public Dostawcy1(TrybOkna tryb) : base()
    {
      
        _baza = new SQLiteBaza();

        Task.Run(async () =>
        {
            CurrentDataTable = await _baza.Dostawcy_widok(TextDescription);
        });

Dla testów wywołuje synchronicznie  funkcje RefreshTable(); i ona odświeża tabele; 
    private async Task RefreshTable()
    {

        CurrentDataTable = await _baza.Dostawcy_widok(TextDescription);

        if (CurrentDataTable.Rows.Count > 0)
            Status = "";
        else
            Status = "Brak danych do wyświetlenia:";
    }
0

@japgajat poczytaj sobie o Taskach, async i await, bo ten Twój kod jest nieźle pogmatwany. Jak używasz await to kodu, który znajduje się pod nim nie pakujesz w ContinueWith, kompilator sam przerobi ten kod na kontynuację. Dodatkowo czy te Task.Run jest tam wgl. potrzebne? Nie wiem co kryje się w metodzie Dostawcy_widok(), ale myślę że prawdopodobnie ten kod nie jest poprawny

1 użytkowników online, w tym zalogowanych: 0, gości: 1