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