Nasıl yapılır: Katıştırılmış bir kaynaktan saat dilimlerini geri yükleme

Bu konuda, bir kaynak dosyasına kaydedilmiş saat dilimlerinin nasıl geri yükleneceği açıklanmaktadır. Saat dilimlerini kaydetme hakkında bilgi ve yönergeler için bkz . Nasıl yapılır: Katıştırılmış bir kaynağa saat dilimlerini kaydetme.

Katıştırılmış bir kaynaktan TimeZoneInfo nesnesini seri durumdan çıkarmak için

  1. Alınacak saat dilimi özel bir saat dilimi değilse, yöntemini kullanarak FindSystemTimeZoneById örneği oluşturmayı deneyin.

  2. ResourceManager Eklenmiş kaynak dosyasının tam adını ve kaynak dosyasını içeren derlemeye başvuruyu geçirerek bir nesne örneği oluşturun.

    Katıştırılmış kaynak dosyasının tam adını belirleyemiyorsanız, derlemenin bildirimini incelemek için Ildasm.exe (IL Disassembler) kullanın. Bir .mresource giriş kaynağı tanımlar. Örnekte kaynağın tam adı şeklindedir SerializeTimeZoneData.SerializedTimeZones.

    Kaynak dosyası saat dilimi örnekleme kodunu içeren aynı derlemeye eklenmişse, (Shared Visual Basic'te) GetExecutingAssembly yöntemini çağırarak static buna bir başvuru alabilirsiniz.

  3. Yöntemine FindSystemTimeZoneById yapılan çağrı başarısız olursa veya özel bir saat dilimi örneği oluşturulacaksa, yöntemini çağırarak ResourceManager.GetString serileştirilmiş saat dilimini içeren bir dize alın.

  4. yöntemini çağırarak saat dilimi verilerini seri durumdan çıkarma FromSerializedString .

Örnek

Aşağıdaki örnek, katıştırılmış .NET XML kaynak dosyasında depolanan bir TimeZoneInfo nesneyi seri durumdan çıkarmaktadır.

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

Bu kod, uygulamanın gerektirdiği bir TimeZoneInfo nesnenin mevcut olduğundan emin olmak için özel durum işlemeyi gösterir. Önce yöntemini kullanarak kayıt defterinden alarak bir TimeZoneInfo nesnenin örneğini FindSystemTimeZoneById oluşturmaya çalışır. Saat dilimi örneği oluşturulamazsa, kod bunu eklenmiş kaynak dosyasından alır.

Özel saat dilimleri için veriler (yöntemi kullanılarak CreateCustomTimeZone örneklenir saat dilimleri) kayıt defterinde depolanmadığından, kod Palmer, Antarktika için saat dilimini örneklemek için öğesini çağırmaz FindSystemTimeZoneById . Bunun yerine, yöntemini çağırmadan FromSerializedString önce saat dilimi verilerini içeren bir dizeyi almak için katıştırılmış kaynak dosyasına hemen bakar.

Kod derleme

Bu örnek şunları gerektirir:

  • System.Windows.Forms.dll ve System.Core.dll başvurularının projeye eklenmesi.

  • Aşağıdaki ad alanlarının içeri aktarılacağı:

    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
    

Ayrıca bkz.