Xamarin 表单 - 异步 ContentPage
Xamarin Forms - async ContentPage
我有以下内容页面,我想在其中加载 Steema Teechart,但我不能,因为我无法使 MainPage 异步:
我的主页:
public class MainPage : ContentPage
{
public MainPage (bool chart)
{
ChartView chartView = new ChartView
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
HeightRequest = 300,
WidthRequest = 400
};
LineModel test1 = new LineModel();
chartView.Model = await test1.GetModel();
//put the chartView in a grid and other stuff
Content = new StackLayout {
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand,
Children = {
grid
}
};
}
}
我的线模型Class:
public class LineModel
{
public async Task<Steema.TeeChart.Chart> GetModel ()
{ //some stuff happens here }
}
如何使 MainPage 异步以便 chartView.Model = await test1.GetModel();
可以工作?我试过 "async MainPage" 但我收到错误。
不,你不能。 Constructor can't be async in C#;典型的解决方法是使用异步工厂方法。
public class MainPage : ContentPage
{
public MainPage (bool chart)
{
ChartView chartView = new ChartView
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
HeightRequest = 300,
WidthRequest = 400
};
}
public static async Task<MainPage> CreateMainPageAsync(bool chart)
{
MainPage page = new MainPage();
LineModel test1 = new LineModel();
chartView.Model = await test1.GetModelAsync();
page.Content = whatever;
return page;
}
}
然后用作
MainPage page = await MainPage.CreateMainPageAsync(true);
请注意,我已将 "Async" 后缀添加到方法 GetModel
,这是用于异步方法的通用约定。
我有以下内容页面,我想在其中加载 Steema Teechart,但我不能,因为我无法使 MainPage 异步:
我的主页:
public class MainPage : ContentPage
{
public MainPage (bool chart)
{
ChartView chartView = new ChartView
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
HeightRequest = 300,
WidthRequest = 400
};
LineModel test1 = new LineModel();
chartView.Model = await test1.GetModel();
//put the chartView in a grid and other stuff
Content = new StackLayout {
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand,
Children = {
grid
}
};
}
}
我的线模型Class:
public class LineModel
{
public async Task<Steema.TeeChart.Chart> GetModel ()
{ //some stuff happens here }
}
如何使 MainPage 异步以便 chartView.Model = await test1.GetModel();
可以工作?我试过 "async MainPage" 但我收到错误。
不,你不能。 Constructor can't be async in C#;典型的解决方法是使用异步工厂方法。
public class MainPage : ContentPage
{
public MainPage (bool chart)
{
ChartView chartView = new ChartView
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
HeightRequest = 300,
WidthRequest = 400
};
}
public static async Task<MainPage> CreateMainPageAsync(bool chart)
{
MainPage page = new MainPage();
LineModel test1 = new LineModel();
chartView.Model = await test1.GetModelAsync();
page.Content = whatever;
return page;
}
}
然后用作
MainPage page = await MainPage.CreateMainPageAsync(true);
请注意,我已将 "Async" 后缀添加到方法 GetModel
,这是用于异步方法的通用约定。