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);
}
Hangi döngü? Ayrıca, "async void", çok kötü bir fikirdir. – David
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
Çü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