C# 非异步循环中的异步方法

C# 非异步循环中的异步方法,c#,asynchronous,win-universal-app,C#,Asynchronous,Win Universal App,我使用循环将图像放置在画布中,有一种方法需要检查每个循环图像是否具有存储在JSON文件中的属性 checkImage方法在循环外工作正常,但当我将其放入循环时,会出现以下错误: 访问被拒绝,文件被另一个进程使用 由于循环创建的每个图像都会调用该方法,我想我需要在JSON文件序列化后关闭它,但是如何关闭呢 循环: while (i < blauw) { checkImage(i); //checks if it has

我使用循环将图像放置在画布中,有一种方法需要检查每个循环图像是否具有存储在JSON文件中的属性

checkImage方法在循环外工作正常,但当我将其放入循环时,会出现以下错误:

访问被拒绝,文件被另一个进程使用

由于循环创建的每个图像都会调用该方法,我想我需要在JSON文件序列化后关闭它,但是如何关闭呢

循环:

 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++;

                }
while(i=5&&i<10)
{
Canvas.SetTop(Btn,marginTop);
Canvas.SetLeft(Btn,marginLeft2);
marginLeft2=marginLeft2+250;
}
否则如果(i<6)
{
Canvas.SetLeft(Btn,marginLeft);
marginLeft=marginLeft+250;
}
如果(i>=10),则为else
{
Canvas.SetTop(Btn,marginTop2);
Canvas.SetLeft(Btn,marginLeft3);
marginLeft3=marginLeft3+250;
}
main.Children.Add(Btn);
i++;
}
检查图像方法:

 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);

    }
private异步void checkImage(int-id){
var foldertest=ApplicationData.Current.temporary文件夹;
var files=await foldertest.getfileasync();
var desiredFile=files.FirstOrDefault(x=>x.Name==“Dierendb.json”);
var textContent=await FileIO.ReadTextAsync(desiredFile);
var result=JsonConvert.DeserializeObject(textContent);
id++;
if(结果[id].PathDier.Equals(“”)
{
//这样做
}
其他的
{
//那样做
}
string dierenlijst=JsonConvert.serialized对象(结果、格式、缩进);
等待Windows.Storage.FileIO.WriteTextAsync(desiredFile、dierenlijst、Windows.Storage.Streams.Unicode.Utf8);
}

返回任务而不是作废。然后像这样在循环中等待它完成

  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;
}
while(i=5&&i<10)
{
Canvas.SetTop(Btn,marginTop);
Canvas.SetLeft(Btn,marginLeft2);
marginLeft2=marginLeft2+250;
}
否则如果(i<6)
{
Canvas.SetLeft(Btn,marginLeft);
marginLeft=marginLeft+250;
}
如果(i>=10),则为else
{
Canvas.SetTop(Btn,marginTop2);
Canvas.SetLeft(Btn,marginLeft3);
marginLeft3=marginLeft3+250;
}
main.Children.Add(Btn);
i++;
}
私有任务检查映像(int i)
{
你的代码
返回true;
}

返回任务而不是作废。然后像这样在循环中等待它完成

  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;
}
while(i=5&&i<10)
{
Canvas.SetTop(Btn,marginTop);
Canvas.SetLeft(Btn,marginLeft2);
marginLeft2=marginLeft2+250;
}
否则如果(i<6)
{
Canvas.SetLeft(Btn,marginLeft);
marginLeft=marginLeft+250;
}
如果(i>=10),则为else
{
Canvas.SetTop(Btn,marginTop2);
Canvas.SetLeft(Btn,marginLeft3);
marginLeft3=marginLeft3+250;
}
main.Children.Add(Btn);
i++;
}
私有任务检查映像(int i)
{
你的代码
返回true;
}
在中,您可以找到返回void和Task之间差异的良好解释。在你的情况下,你应该