Share via


Procedure: Tijdzones herstellen vanuit een ingesloten resource

In dit onderwerp wordt beschreven hoe u tijdzones herstelt die zijn opgeslagen in een resourcebestand. Zie Hoe kunt u tijdzones besparen voor informatie en instructies over het besparen van tijdzones : Tijdzones opslaan in een ingesloten resource.

Een TimeZoneInfo-object deserialiseren vanuit een ingesloten resource

  1. Als de te ophalen tijdzone geen aangepaste tijdzone is, probeert u deze te instantiëren met behulp van de FindSystemTimeZoneById methode.

  2. Instantieer een ResourceManager object door de volledig gekwalificeerde naam van het ingesloten resourcebestand door te geven en een verwijzing naar de assembly die het resourcebestand bevat.

    Als u de volledig gekwalificeerde naam van het ingesloten resourcebestand niet kunt bepalen, gebruikt u de Ildasm.exe (IL Disassembler) om het manifest van de assembly te onderzoeken. Een .mresource vermelding identificeert de resource. In het voorbeeld is SerializeTimeZoneData.SerializedTimeZonesde volledig gekwalificeerde naam van de resource.

    Als het resourcebestand is ingesloten in dezelfde assembly die de instantiecode van de tijdzone bevat, kunt u er een verwijzing naar ophalen door de static methode (Shared in Visual Basic) GetExecutingAssembly aan te roepen.

  3. Als de aanroep naar de FindSystemTimeZoneById methode mislukt of als een aangepaste tijdzone moet worden geïnstantieerd, haalt u een tekenreeks op die de geserialiseerde tijdzone bevat door de ResourceManager.GetString methode aan te roepen.

  4. Deserialiseer de tijdzonegegevens door de methode aan te FromSerializedString roepen.

Opmerking

In het volgende voorbeeld wordt een TimeZoneInfo object gedeserialiseerd dat is opgeslagen in een ingesloten .NET XML-resourcebestand.

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

Deze code illustreert de verwerking van uitzonderingen om ervoor te zorgen dat een TimeZoneInfo object aanwezig is dat door de toepassing is vereist. Eerst wordt geprobeerd een TimeZoneInfo object te instantiëren door het op te halen uit het register met behulp van de FindSystemTimeZoneById methode. Als de tijdzone niet kan worden geïnstantieerd, haalt de code deze op uit het ingesloten resourcebestand.

Omdat gegevens voor aangepaste tijdzones (tijdzones die met behulp van de CreateCustomTimeZone methode worden geïnstantieerd) niet in het register worden opgeslagen, roept de code de FindSystemTimeZoneById code niet aan om de tijdzone voor Palmer, Antarctica te instantiëren. In plaats daarvan wordt er onmiddellijk naar het ingesloten resourcebestand gezocht om een tekenreeks op te halen die de gegevens van de tijdzone bevat voordat de methode wordt FromSerializedString aangeroepen.

De code compileren

Voor dit voorbeeld is het volgende vereist:

  • Dat een verwijzing naar System.Windows.Forms.dll en System.Core.dll aan het project worden toegevoegd.

  • De volgende naamruimten worden geïmporteerd:

    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
    

Zie ook