访问两个解决方案(C#、异步)之间的列表项
Access to list items between two solutions (C#, Async)
我有两个解决方案:
Sol1:
public class Sol1{
internal override IList<MenuItem> MenuItems
{
//some code
GetItems();
return items;
}
internal override async void GetItems()
{
//code
//async method
//code
//async method
}
}
解决方案一是创建第一个一级菜单。然后进入解决方案 2,在创建拳头级菜单后我想访问这个“items”。
Sol2:
public class Sol2{
private async Task SecondLev{
//some code
Sol1 sol1 = new Sol1();
var test = sol1.items;
}
}
但它们总是空的。我不想再 运行 一次方法 MenuItems,但可以访问这些项目。
它们是空的,因为您不等待异步操作。
您的代码应如下所示:
public class Sol1
{
internal IList<MenuItem> MenuItems { get; private set; }
internal async Task GetItems()
{
// some async code
// ...
MenuItems = someResult;
}
}
public class Sol2
{
private async Task SecondLevel()
{
//some code
Sol1 sol1 = new Sol1();
await sol1.GetItems();
var test = sol1.MenuItems;
}
}
几点注意事项:
- 如果它们不是事件处理程序,请不要创建
async void
方法,使用
async Task
代替。
- 你不能有异步属性,只有异步方法。
我有两个解决方案:
Sol1:
public class Sol1{
internal override IList<MenuItem> MenuItems
{
//some code
GetItems();
return items;
}
internal override async void GetItems()
{
//code
//async method
//code
//async method
}
}
解决方案一是创建第一个一级菜单。然后进入解决方案 2,在创建拳头级菜单后我想访问这个“items”。
Sol2:
public class Sol2{
private async Task SecondLev{
//some code
Sol1 sol1 = new Sol1();
var test = sol1.items;
}
}
但它们总是空的。我不想再 运行 一次方法 MenuItems,但可以访问这些项目。
它们是空的,因为您不等待异步操作。
您的代码应如下所示:
public class Sol1
{
internal IList<MenuItem> MenuItems { get; private set; }
internal async Task GetItems()
{
// some async code
// ...
MenuItems = someResult;
}
}
public class Sol2
{
private async Task SecondLevel()
{
//some code
Sol1 sol1 = new Sol1();
await sol1.GetItems();
var test = sol1.MenuItems;
}
}
几点注意事项:
- 如果它们不是事件处理程序,请不要创建
async void
方法,使用async Task
代替。 - 你不能有异步属性,只有异步方法。