Postupy: Obnovení časových pásem z integrovaného prostředku
Toto téma popisuje, jak obnovit časová pásma uložená v souboru prostředků. Informace a pokyny k úspoře časových pásem najdete v tématu Postupy: Úspora časových pásem do vloženého prostředku.
Deserializace objektu TimeZoneInfo z vloženého prostředku
Pokud časové pásmo, které se má načíst, není vlastní časové pásmo, zkuste vytvořit instanci pomocí FindSystemTimeZoneById metody.
ResourceManager Vytvořte instanci objektu předáním plně kvalifikovaného názvu vloženého souboru prostředků a odkazu na sestavení, které obsahuje soubor prostředků.
Pokud nemůžete určit plně kvalifikovaný název vloženého souboru prostředků, pomocí Ildasm.exe (IL Disassembler) zkontrolujte manifest sestavení. Položka
.mresource
identifikuje prostředek. V příkladu je plně kvalifikovaný názevSerializeTimeZoneData.SerializedTimeZones
prostředku .Pokud je soubor prostředků vložen do stejného sestavení, které obsahuje kód instance časového pásma, můžete na něj načíst odkaz voláním
static
metody (Shared
v jazyce Visual Basic). GetExecutingAssemblyPokud volání FindSystemTimeZoneById metody selže nebo pokud se vytvoří instance vlastního časového pásma, načtěte řetězec, který obsahuje serializované časové pásmo voláním ResourceManager.GetString metody.
Deserializovat data časového pásma voláním FromSerializedString metody.
Příklad
Následující příklad deserializuje TimeZoneInfo objekt uložený ve vloženém souboru prostředků .NET XML.
private void DeserializeTimeZones()
{
TimeZoneInfo cst, palmer;
string timeZoneString;
ResourceManager resMgr = new ResourceManager("SerializeTimeZoneData.SerializedTimeZones", this.GetType().Assembly);
// Attempt to retrieve time zone from system
try
{
cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
}
catch (TimeZoneNotFoundException)
{
// Time zone not in system; retrieve from resource
timeZoneString = resMgr.GetString("CentralStandardTime");
if (! String.IsNullOrEmpty(timeZoneString))
{
cst = TimeZoneInfo.FromSerializedString(timeZoneString);
}
else
{
MessageBox.Show("Unable to create Central Standard Time Zone. Application must exit.", "Application Error");
return;
}
}
// Retrieve custom time zone
try
{
timeZoneString = resMgr.GetString("PalmerStandardTime");
palmer = TimeZoneInfo.FromSerializedString(timeZoneString);
}
catch (MissingManifestResourceException)
{
MessageBox.Show("Unable to retrieve the Palmer Standard Time Zone from the resource file. Application must exit.");
return;
}
}
Private Sub DeserializeTimeZones()
Dim cst, palmer As TimeZoneInfo
Dim timeZoneString As String
Dim resMgr As ResourceManager = New ResourceManager("SerializeTimeZoneData.SerializedTimeZones",
GetType(SerializeTimeZoneData).Assembly)
' Attempt to retrieve time zone from system
Try
cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
Catch ex As TimeZoneNotFoundException
' Time zone not in system; retrieve from resource
timeZoneString = resMgr.GetString("CentralStandardTime")
If Not String.IsNullOrEmpty(timeZoneString) Then
cst = TimeZoneInfo.FromSerializedString(timeZoneString)
Else
MsgBox("Unable to create Central Standard Time Zone. Application must exit.")
Exit Sub
End If
End Try
' Retrieve custom time zone
Try
timeZoneString = resMgr.GetString("PalmerStandardTime")
palmer = TimeZoneInfo.FromSerializedString(timeZoneString)
Catch ex As Exception
MsgBox(ex.GetType().Name & ": Unable to create Palmer Standard Time Zone. Application must exit.")
Exit Sub
End Try
End Sub
Tento kód znázorňuje zpracování výjimek, aby se zajistilo, že TimeZoneInfo existuje objekt vyžadovaný aplikací. Nejprve se pokusí vytvořit instanci TimeZoneInfo objektu načtením z registru pomocí FindSystemTimeZoneById metody. Pokud nelze vytvořit instanci časového pásma, kód ho načte ze souboru vloženého prostředku.
Vzhledem k tomu, že data pro vlastní časová pásma (vytvoření instance časových pásem pomocí CreateCustomTimeZone metody) nejsou uložená v registru, kód nevyvolá FindSystemTimeZoneById vytvoření instance časového pásma pro Palmer, Antarktidu. Místo toho okamžitě hledá vložený soubor prostředků k načtení řetězce, který obsahuje data časového pásma před voláním FromSerializedString metody.
Zkompilování kódu
Tento příklad vyžaduje:
Odkaz na System.Windows.Forms.dll a System.Core.dll se do projektu přidá.
Importují se následující obory názvů:
using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Reflection; using System.Resources; using System.Windows.Forms;
Imports System.Globalization Imports System.IO Imports System.Reflection Imports System.Resources