2016-03-26 21 views
0

Bir windows uygulaması geliştiriyorum. CoverSource tipi ImageSource numaralı bir FileName ve string türünde bir model sınıfı vardır. Her ikisi de görünümlere veri teklifi veriyor, böylece alıcılarını veya ayarlayıcılarını eşzamansız işlevlerini yapamıyorum. Şimdi bunu FileName ayarlayıcısında istiyorum, bir eşzamanlama fonksiyonu çağrılacak ve bundan sonra CoverSourceApplicationData.Current.LocalFolder'dan dosya okunarak eşzamansız olarak ayarlanacaktır. Ben C# için bir acemi ve Google'dan biraz yardım alıyorum. Öyleyse böyle bir uyumsuzluk fonksiyonunu nasıl yazmalı ve onu geri arama ile, sadece Javascript'te böyle bir şeyle nasıl çağırmalı?C# içinde beklemeden LocalFolder'dan görüntü nasıl okunur?

+0

Neden bunu getter ayarlayıcısında yazmalısınız? Başka bir yere ayarla. Örneğin, OnNavigatedTo veya OnLoaded yönteminde – Archana

+0

Resmi başka bir yöntemle yükleyin ve geri çağırma özelliğini kullanarak mülkünüzü ayarlayın ve yükseltin. –

cevap

0

Birkaç çelişen gereksiniminiz var. İlk olarak, Windows platformu (diğer modern mobil platformlarda olduğu gibi), görünüm güncellemelerinizin senkronize olmasını gerektirir. UI iş parçacığının engellenmesi kabul edilebilir değildir; herhangi bir güncelleme derhal yapılmalıdır. İkincisi, bir dosyayı okumak I/O tabanlı bir işlemdir ve dolayısıyla doğal olarak asenkrondir. Böylece sizi engellemeyen bir yaklaşıma sokuyor. Cevap, her iki gereksinimin de doğru olduğunu anlamaktır. UI , derhal güncellenmelidir ve dosya I/O ,, rasgele bir zaman alır. Dolayısıyla, doğru tasarım, G/Ç işlemi devam ederken kullanıcı arayüzünüzün neye benzediğini düşünmek ve sonra bu senaryo için özel olarak tasarlamaktır. Böyle

şey çalışması gerekir: Ben çok daha ayrıntılı anlatır ve bu yaklaşımla Demirbaş kodu bir sürü ilgilenir bir NotifyTaskCompletion türünü tanıtır bir MSDN article on async data binding var

public string FileName 
{ 
    get { return fileName; } 
    set 
    { 
    fileName = value; 
    LoadFileAsync(); 
    } 
} 

private async Task LoadFileAsync() 
{ 
    try 
    { 
    CoverSource = ...; // "Loading" image or something. 
    var image = await ...; 
    CoverSource = image; 
    } 
    catch (Exception ex) 
    { 
    CoverSource = ...; // "Error" image or something. 
    } 
} 

.