Postupy: Obnovení časových pásem z integrovaného zdroje
Toto téma popisuje, jak obnovit časová pásma, které byly uloženy v souboru prostředku. Informace a pokyny týkající se ukládání časových pásem naleznete v tématu Postupy: Uložit časová pásma do integrovaného prostředku.
Chcete-li deserializovat objekt TimeZoneInfo od integrovaného zdroje
Pokud časové pásmo k načtení není vlastní časové pásmo, pokuste se vytvořit instanci pomocí metody FindSystemTimeZoneById.
Vytvořte instanci objektu ResourceManager předáním plně kvalifikovaného názvu souboru integrovaného zdroje a odkazu na sestavení, které obsahuje soubor prostředků.
Pokud nelze určit plně kvalifikovaný název integrovaného zdroje souboru, použijte Ildasm.exe (MSIL Disassembler) pro přezkoumání manifestu sestavení. Položka .mresource označuje zdroj. V příkladu je plně kvalifikovaný název zdroje SerializeTimeZoneData.SerializedTimeZones.
Pokud je soubor zdrojů integrovaný ve stejném sestavení, které obsahuje instanční kód pro časové pásmo, můžete načíst odkaz na toto sestavení voláním metody static (Shared v jazyce Visual Basic) GetExecutingAssembly.
Pokud se volání metody FindSystemTimeZoneById nezdaří, nebo pokud má být vytvořena instance vlastního časového pásma, načtěte řetězec, který obsahuje serializované časové pásmo, voláním metody ResourceManager.GetString.
Deserializujte údaje časového pásma voláním metody FromSerializedString.
Příklad
Následující příklad deserializuje objekt TimeZoneInfo, který je uložen ve vloženém XML souboru prostředků .NET.
Private Sub DeserializeTimeZones()
Dim cst, palmer As TimeZoneInfo
Dim timeZoneString As String
Dim resMgr As ResourceManager = New ResourceManager("SerializeTimeZoneData.SerializedTimeZones", Assembly.GetExecutingAssembly)
' 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
private void DeserializeTimeZones()
{
TimeZoneInfo cst, palmer;
string timeZoneString;
ResourceManager resMgr = new ResourceManager("SerializeTimeZoneData.SerializedTimeZones", Assembly.GetExecutingAssembly());
// 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;
}
}
Tento kód ukazuje zpracování výjimek k zajištění toho, aby objekt TimeZoneInfo, který je požadován aplikací, byl k dispozici. Nejprve se pokusí vytvořit objekt TimeZoneInfo načtením z registru pomocí metody FindSystemTimeZoneById. Pokud nelze vytvořit instanci časového pásma, kód ji načte ze souboru integrovaných zdrojů.
Protože data pro vlastní časová pásma (instance časových pásem vytvořené pomocí metody CreateCustomTimeZone) nejsou uloženy v registru, kód nevolá FindSystemTimeZoneById po vytvoření instance časového pásma pro Palmer Antarktida. Místo toho ihned nahlíží k souboru integrovaného zdroje, aby načetl řetězec, který obsahuje údaje časového pásma, před tím, než volá metodu FromSerializedString.
Probíhá kompilace kódu
Tento příklad vyžaduje:
Aby byl přidán do projektu odkaz na System.Windows.Forms.dll a System.Core.dll.
Aby byly importované následující obory názvů:
Imports System.Globalization Imports System.IO Imports System.Reflection Imports System.Resources
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;
Viz také
Úkoly
Postupy: Uložit časová pásma do integrovaného prostředku