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
Alınacak saat dilimi özel bir saat dilimi değilse, yöntemini kullanarak FindSystemTimeZoneById örneği oluşturmayı deneyin.
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ı şeklindedirSerializeTimeZoneData.SerializedTimeZones
.Kaynak dosyası saat dilimi örnekleme kodunu içeren aynı derlemeye eklenmişse, (
Shared
Visual Basic'te) GetExecutingAssembly yöntemini çağırarakstatic
buna bir başvuru alabilirsiniz.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.
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