Задать вопрос
Ответы пользователя по тегу C#
  • Как разблокировка 120 fps на Android?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Screen.SetResolution(Screen.currentResolution.width, Screen.currentResolution.height, true, 120);
    Application.targetFrameRate = 120;
    Ответ написан
    Комментировать
  • Как предотвратить изменение пользователем данных во время выполнения async метода сохранения этих данных?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Всё зависит от конкретной ситуации...
    На мой взгляд, наиболее простым и действенным решением будет временное отключение элементов управления, которые позволяют пользователю менять данные. Отключаете элементы интерфейса пользователю, пока выполняется асинхронный процесс сохранения, и будет вам счастье.

    В XAML вы можете сделать что-то вроде этого:
    <Button Content="Сохранить" Command="{Binding SaveCommand}" IsEnabled="{Binding IsSaving}" />
    <TextBox Text="{Binding Person.Name}" IsEnabled="{Binding IsSaving, Converter={StaticResource InverseBoolConverter}}" />


    В ViewModel не забудьте добавить свойство IsSaving, которое будет управлять состоянием элементов:
    public bool IsSaving { get; private set; }
    
    private async Task SaveDataAsync()
    {
        IsSaving = false;
        RaisePropertyChanged(nameof(IsSaving));
    
        await repository.SaveAsync(person);
    
        IsSaving = true;
        RaisePropertyChanged(nameof(IsSaving));
    }
    Ответ написан
    Комментировать
  • Как отключить автоматическое завершение работы браузера при выходе из функции в Playwright?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Привет!

    Не очень понял трактовку твоего вопроса
    Я просто не могу выделить части кода в отдельные методы. Мне нужно чтобы мой код размещался в разных методах...


    Если ты хочешь сделать распределение твоего кода по разным методам таким образом, чтобы сессия браузера смогла выполняться дальше при переходе между методами, то как минимум стоит сделать инициализацию браузера и страницы глобальными.

    Вот, например, так:

    IBrowser browser;
    IPage page;
    
    async Task InitializeBrowserAsync()
    {
        var playwright = await Playwright.CreateAsync();
        browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
        page = await browser.NewPageAsync();
    }
    
    async Task CreateRegistryAsync()
    {
        await page.GetByRole(AriaRole.Button, new() { Name = "Создать реестр" }).ClickAsync();
        string strKitCategory = templateSheet.GetCell(currentSheetRow, (int)ExcellTemplateTableSheet.ColumnType.kitCategory);
        await page.GetByText(strKitCategory).ClickAsync();
    }
    
    async Task FillDetailsAsync()
    {
        string rChKit = templateSheet.GetCell(currentSheetRow, (int)ExcellTemplateTableSheet.ColumnType.RCHKit);
        await page.GetByLabel("Комплект РЧ").FillAsync(rChKit);
        await page.GetByText(rChKit).ClickAsync();
    }
    
    async Task SubmitRegistryAsync()
    {
        string worcksDescription = templateSheet.GetCell(currentSheetRow, (int)ExcellTemplateTableSheet.ColumnType.descriptionOfWorks);
        await page.GetByLabel("Описание работ").FillAsync(worcksDescription);
        await page.GetByRole(AriaRole.Button, new() { Name = "Создать", Exact = true }).ClickAsync();
    }
    
    async Task MainAsync()
    {
        await InitializeBrowserAsync();
        await CreateRegistryAsync();
        await FillDetailsAsync();
        await SubmitRegistryAsync();
    }


    Если важно сохранять не только браузер, но и сессию пользователя, можешь использовать persistent context:

    async Task InitializePersistentContextAsync()
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchPersistentContextAsync("PATH", new BrowserTypeLaunchPersistentContextOptions { Headless = false });
        page = browser.Pages.First();
    }
    Ответ написан