private bool isDoInMercatorInstanceBusy = false;

private async void Button_Clicked(object sender, EventArgs e)
{
    if (isDoInMercatorInstanceBusy)
        return;

    Button button = (Button)sender;
    HistoDescriptor histoDescriptor = (HistoDescriptor)button.CommandParameter;
    button.IsEnabled = false;
    isDoInMercatorInstanceBusy = true;

    DoInMercatorInstanceRequest doInMercatorInstanceRequest = new DoInMercatorInstanceRequest
    {
        Type = histoDescriptor.Type,
        Id = histoDescriptor.Id,
        Journal = histoDescriptor.Journal,
        Piece = histoDescriptor.Piece
    };

    MercatorPenguin.DoInMercatorInstanceDescriptor doInMercatorInstanceDescriptor = new MercatorPenguin.DoInMercatorInstanceDescriptor
    {
        Assembly = "<Other\\TestPenguinCustomServer\\Server\\TestPenguinCustomServer.dll",
        ClassName = "TestPenguinCustomServer.TestClass",
        MethodName = "DoubleQuantities",
        Parameter = Api.JsonConvertSerializeObject(doInMercatorInstanceRequest)
    };

    activityIndicator.SetActive(true);
    var r = await MercatorPenguin.BaseCustomPage.DoInMercatorInstance(doInMercatorInstanceDescriptor);
    activityIndicator.SetActive(false);
    if (r.Error != null)
    {
        _ = MercatorPenguin.Dialogs.Stop(this, r.Error);
    }
    else
    {
        DoInMercatorInstanceResponse doInMercatorInstanceResponse = Api.JsonConvertDeserializeObject<DoInMercatorInstanceResponse>(r.Result);
        if (doInMercatorInstanceResponse.Error != null)
            _ = MercatorPenguin.Dialogs.Stop(this, doInMercatorInstanceResponse.Error);
        else
            _ = MercatorPenguin.Dialogs.Stop(this, doInMercatorInstanceResponse.Result);
    }

    button.IsEnabled = true;
    isDoInMercatorInstanceBusy = false;
}