Api.IsWeb is een statische eigenschap die bepaalt of de webmodus, d.w.z. stille modus (dus zonder dialoogvensters), moet worden geactiveerd. Standaard staat deze eigenschap in Mercator op false. In webapplicaties of MercatorPenguinServer staat ze op true. Omdat het een statische eigenschap is, geldt ze voor het hele AppDomain en alle threads die daarin draaien. Het wijzigen van deze eigenschap moet vermeden worden, want in de meeste gevallen is dat niet nodig.
Het zonder voorzorg op false zetten in een customizer zonder de oorspronkelijke waarde correct terug te plaatsen, is schadelijk in een webapplicatie of MercatorPenguinServer, omdat processen daar kunnen worden geblokkeerd door onverwachte dialoogvensters.
Het op true zetten kan tot gevolg hebben dat Mercator desktop verder werkt zonder bepaalde dialoogvensters die de gebruiker normaal verwacht.
Men moet er rekening mee houden dat een customizer die deze waarde wijzigt, in beide contexten kan draaien: Mercator desktop en MercatorPenguinServer, elk met een andere standaardwaarde van Api.IsWeb.
Als een wijziging echt noodzakelijk is, bijvoorbeeld om in bepaalde omstandigheden het tonen van dialoogvensters uit te schakelen, dan moet verplicht onderstaand patroon gebruikt worden:
bool previousApiIsWeb = Api.IsWeb;
try
{
Api.IsWeb = false of true;
...
}
finally
{
Api.IsWeb = previousApiIsWeb;
}
Let op het try / finally blok, wat betekent dat het niet uitmaakt hoe je de code onder try afsluit:
- door een return in de code,
- of door een exception,
de code in finally zal altijd worden uitgevoerd.
Het gebruik van het hierboven beschreven patroon is verplicht.
In het geval van toepassingen met meerdere threads (bijvoorbeeld webapplicaties), is het waarschijnlijk nodig om bescherming op te zetten tegen gelijktijdige toegang die de andere waarde van Api.IsWeb zou vereisen. Dit kan eenvoudig worden geïmplementeerd via deze enkele statische eigenschap voor alle code:
public static object lockApiIsWeb = new object();
en het instellen van de lock in de code:
lock (lockApiIsWeb)
{
bool previousApiIsWeb = Api.IsWeb;
try
{
Api.IsWeb = false;
...
}
finally
{
Api.IsWeb = previousApiIsWeb;
}
}
Er moet worden opgemerkt dat de bovenstaande code een wachtrijsysteem creëert dat de prestaties van de applicaties negatief kan beïnvloeden.