小编Igo*_*ues的帖子

如何使用BackgroundService和依赖注入运行Winforms?

我正在尝试启动分配给IHostBuilder的services.HostedService的BackgroundService。

IHostBuilder定义:

private static IHostBuilder CreateHostBuilder()
    {
        return Host.CreateDefaultBuilder()
            .ConfigureServices(services =>
            {
                services.AddHostedService<LicenseControl>();

                services.AddTransient<Database>();
                services.AddTransient<CoreLicense>();

                services.AddSingleton<FormSelector>();

                services.AddTransient<ClienteForm>();
                services.AddTransient<GastoForm>();
                services.AddTransient<IngredienteForm>();
                services.AddTransient<ProdutoForm>();
                services.AddTransient<ReceitaForm>();
                services.AddTransient<RelatorioForm>();
                services.AddTransient<VendaForm>();
                services.AddTransient<MainForm>();
                services.AddTransient<ConfiguracoesForm>();
                services.AddTransient<UsuarioForm>();

                services.AddSingleton<AuthenticationForm>();
                
                services.AddScoped<IBridgeRepository, BridgeRepository>();
                services.AddScoped<IClienteRepository, ClienteRepository>();
                services.AddScoped<IGastoRepository, GastoRepository>();
                services.AddScoped<IIBGERepository, IBGERepository>();
                services.AddScoped<IIngredienteRepository, IngredienteRepository>();
                services.AddScoped<IProdutoRepository, ProdutoRepository>();
                services.AddScoped<IReceitaRepository, ReceitaRepository>();
                services.AddScoped<IVendaRepository, VendaRepository>();
                services.AddScoped<IUsuarioRepository, UsuarioRepository>();

                services.AddLogging(
                builder =>
                {
                    builder.AddFilter("Microsoft", LogLevel.Warning)
                           .AddFilter("System", LogLevel.Warning)
                           .AddFilter("NToastNotify", LogLevel.Warning)
                           .AddConsole();
                }
                );
            });
    }
Run Code Online (Sandbox Code Playgroud)

但我发现启动HostedService 的唯一可能的方法是运行以下命令:

await CreateHostBuilder().Build().RunAsync();   
Run Code Online (Sandbox Code Playgroud)

最后,问题发生是因为在这种方法中,线程锁定在该行上,并且不允许我运行公共块代码来启动表单本身:

Application.Run(new MainForm());
Run Code Online (Sandbox Code Playgroud)

如果我先运行表单,也会发生同样的情况,线程会锁定该行,并且不会让我调用HostBuilder …

.net c# dependency-injection background-service winforms

3
推荐指数
1
解决办法
2538
查看次数

Android上不全局支持PushAsync,请使用NavigationPage

我正在做一个主详细页面作为菜单,但出现此错误:

Android上不全局支持PushAsync,请使用NavigationPage。

当我尝试实例化另一个页面时。我相信我的代码在实例化页面时已经创建了一个导航页面,但是我不确定。有人能帮我吗?

App.xaml.cs:

public partial class App : Application
{
    static public MasterDetailPage MasterDetail { get; set; }

    public async static Task NavigateMasterDetail(Page page)
    {
        App.MasterDetail.IsPresented = false;
        await App.MasterDetail.Navigation.PushAsync(page);
    }


    public App ()
    {
        InitializeComponent();

        MainPage = new selectPage();
    }
Run Code Online (Sandbox Code Playgroud)

带有菜单的页面,请选择页面:

public partial class selectPage : MasterDetailPage
{
    public selectPage()
    {
        InitializeComponent();

        this.Master = new Master();
        this.Detail = new NavigationPage(new Detail());

        App.MasterDetail = this;
    }
}
Run Code Online (Sandbox Code Playgroud)

Master.xaml.cs:

public Master ()
{
    InitializeComponent ();

    toDivPage.Clicked += async (sender, e) …
Run Code Online (Sandbox Code Playgroud)

c# android xamarin xamarin.forms

1
推荐指数
1
解决办法
1147
查看次数