2016-03-25 42 views
0

Görüntüleri tuvalim içine yerleştirmek için bir döngü kullanıyorum, her ilmekli görüntünün bir JSON dosyasında depolanmış bir özniteliğe sahip olup olmadığını kontrol etmesi gereken bir yöntem var.async yöntemi

checkImage yöntemi döngü dışında gayet iyi çalışıyor, ama döngü içinde yerleştirin zaman bu hatayı veriyor: yöntem İhtiyacım olduğunu tahmin döngü tarafından oluşturulan her resim için çağrılan yana

"Access denied, file is used by another process"

JSON dosyasını serileştirilmiş veya başka bir şeyden sonra kapatmak için, ama nasıl?

döngü:

while (i < blauw) 
       { 
        checkImage(i); //checks if it has the attribute or not 
        ImageBrush brush = new ImageBrush(); 
        Button Btn = new Button(); 
        Uri uri = new Uri("ms-appx://Blijfie/images/" + selected + "/" + blauwpics[i]); 
        BitmapImage imgSource = new BitmapImage(uri); 
        brush.ImageSource = imgSource; 
        Btn.Background = brush; 
        Btn.Width = 200; 
        Btn.Height = 200; 

        if (i >= 5 && i < 10) 
        { 
         Canvas.SetTop(Btn, marginTop); 
         Canvas.SetLeft(Btn, marginLeft2); 
         marginLeft2 = marginLeft2 + 250; 
        } 
        else if (i < 6) 
        { 
         Canvas.SetLeft(Btn, marginLeft); 
         marginLeft = marginLeft + 250; 

        } 
        else if (i >= 10) 
        { 
         Canvas.SetTop(Btn, marginTop2); 
         Canvas.SetLeft(Btn, marginLeft3); 
         marginLeft3 = marginLeft3 + 250; 
        } 
        main.Children.Add(Btn); 
        i++; 

       } 

CheckImage yöntemi:

private async void checkImage(int id) { 
        var foldertest = ApplicationData.Current.TemporaryFolder; 
        var files = await foldertest.GetFilesAsync(); 
        var desiredFile = files.FirstOrDefault(x => x.Name == "Dierendb.json"); 
        var textContent = await FileIO.ReadTextAsync(desiredFile); 

        var result = JsonConvert.DeserializeObject<List<Dier>>(textContent); 

        id++; 

        if (result[id].PathDier.Equals("")) 
        { 
         //do this 
        } 
        else 
        { 
         //do that 
        } 


        string dierenlijst = JsonConvert.SerializeObject(result, Formatting.Indented); 
        await Windows.Storage.FileIO.WriteTextAsync(desiredFile, dierenlijst, Windows.Storage.Streams.UnicodeEncoding.Utf8); 

    } 
+1

Hangi döngü? Ayrıca, "async void", çok kötü bir fikirdir. – David

+0

Döngü ekledi, gerekli olduğunu düşünmedim. Neden bu kötü bir fikir? Muhtemelen bunu yapmanın daha iyi bir yolu vardır, ancak 1'i düşünemezsiniz. – Yoshi

+1

Çünkü 'void' beklenemez. Döngüde, yöntemi beklemediğinizi unutmayın. Yönteme birden fazla çağrı aynı anda aynı dosyaya yazmaya çalışıyorsa, dosya sistemi bunu reddeder. – David

cevap

4

Dönüş Görev yerine geçersiz. Ve bunun gibi döngü içinde tamamlanması için bekliyoruz.

while (i < blauw) 
       { 
        var bool= await checkImage(i); //checks if it has the attribute or not 
        ImageBrush brush = new ImageBrush(); 
        Button Btn = new Button(); 
        Uri uri = new Uri("ms-appx://Blijfie/images/" + selected + "/" + blauwpics[i]); 
        BitmapImage imgSource = new BitmapImage(uri); 
        brush.ImageSource = imgSource; 
        Btn.Background = brush; 
        Btn.Width = 200; 
        Btn.Height = 200; 

        if (i >= 5 && i < 10) 
        { 
         Canvas.SetTop(Btn, marginTop); 
         Canvas.SetLeft(Btn, marginLeft2); 
         marginLeft2 = marginLeft2 + 250; 
        } 
        else if (i < 6) 
        { 
         Canvas.SetLeft(Btn, marginLeft); 
         marginLeft = marginLeft + 250; 

        } 
        else if (i >= 10) 
        { 
         Canvas.SetTop(Btn, marginTop2); 
         Canvas.SetLeft(Btn, marginLeft3); 
         marginLeft3 = marginLeft3 + 250; 
        } 
        main.Children.Add(Btn); 
        i++; 

       } 

Private Task<bool> CheckImage(int i) 
{ 
Yourcode 
Return true; 
} 
+0

şimdilik çalışmak gibi görünüyor, daha fazla test edecek. Şerefe! – Yoshi

1

this answer size boşluk ve Görev dönen arasında iyi bir açıklama farkı bulabilirsiniz. Durumda, dönüş türünü Görev olarak değiştirmeli ve döngünüzde beklemeniz gerekir.