zoukankan      html  css  js  c++  java
  • 在silverlight中使用IsolateStore隔离存储(上)

         隔离存储(Isolate Store) 是一个虚拟的文件系统 . 它可用于保存本地(客户端文件)。下面是微软的一些解释:
        
         虚拟文件系统根目录对于每个机器当前登陆用户不同的, 它是一个隐藏的文件夹,存在于物理文件系统中. 每个
    application的不同标识将会使其映射到不同的文件夹中, 也就是说,将分配给每个不同的application 一个属于它的
    虚拟文件系统. .NET Framework version 2.0中的文件夹节构和隐藏架构同样在.NET Framework for Silverlight中
    也用到了.

        而在silverlight开发中,允许我们使用Isolate Store(位于System.IO.IsolatedStorage名空间),其下有几个
    主要的类如:

         IsolatedStorageSettings (以Dictionary<<(TKey, TValue)>> 键值对的方式来存储数据,本文DEMO的演示内容)

         IsolatedStorageFile (返回一个包括路径和文件的虚拟区域, 用于管理目录,文件等, 会在下一篇中演示)
        
         IsolatedStorageFileStream (以流的方式读写指定路径的文件, 会在下一篇中演示)
       
       
         下面就先演示一下IsolatedStorageSettings的使用方法:
         
         假设我们有一个应用,它是一个本地邮件管理和发送程序(如OutLook等).而我们写完一封EMAIL时可能不会立即将   
    其发送出去,而是还生成一个Draft(草稿,以便日后进行编辑),当我们认为可以发送时才会去SEND。

         下面就是这个应用的一个原型, 如下图:

        
        
         我们可以在输入了相关信息之后,先将其保存为草稿. 当我们下次再运行这个应用时,做自动加载当前的草稿, 以
    便我们进行编辑操作.当工作完成之后,就可以将其发送到Server端. 如果认为内容不好,我们也可以从Isolate Store
    区中将该项内容删除.

        下面就是它的page.xaml代码:   

    <Grid x:Name="LayoutRoot" Background="AliceBlue">
        
    <Grid.RowDefinitions>
            
    <RowDefinition  Height="40"/>
            
    <RowDefinition  Height="40"/>            
            
    <RowDefinition  Height="231"/>
            
    <RowDefinition Height="*"/>
        
    </Grid.RowDefinitions>
        
    <Grid.ColumnDefinitions>
            
    <ColumnDefinition Width="122" />
            
    <ColumnDefinition Width="*" />
        
    </Grid.ColumnDefinitions>

        
    <TextBlock Grid.Row="0" Grid.Column="0"  Margin="5,5,57,5" HorizontalAlignment="Stretch">
         
    <Run Text="收件人:"/>
        
    </TextBlock>
        
    <TextBox x:Name="Recipient"  Width="200" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" Margin="5,5,0,5"/>

        
    <TextBlock Grid.Row="1" Grid.Column="0" Margin="5,5,57,5" HorizontalAlignment="Stretch">
         
    <Run Text="主 题:"/>
        
    </TextBlock>
        
    <TextBox x:Name="Subject"  Width="200" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" Margin="5,5,0,5"/>

        
    <TextBlock Grid.Row="2" Grid.Column="0" Margin="5,5,57,36" HorizontalAlignment="Stretch" >
         
    <Run Text="内 容:"/>
        
    </TextBlock>
        
    <TextBox x:Name="Body" TextWrapping="Wrap"  Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch" Margin="5,5,8,5" Grid.RowSpan="1"/>
        
        
    <StackPanel Grid.ColumnSpan="2" Grid.Row="3" Orientation="Horizontal" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="8,23.5,64,8">
            
    <Button x:Name="SaveToDraft" Margin="5,5,5,5" Content=" 保存为草稿(本地) " Click="SaveToDraft_Click" />
            
    <Button x:Name="SaveToServer" Margin="5,5,5,5" Content=" 上传到服务器 "  Click="SaveToServer_Click"/>
            
    <Button x:Name="DeleteDraft" Margin="5,5,5,5" Content=" 删除当前草稿(本地) " Click="DeleteDraft_Click" />
        
    </StackPanel>
    </Grid>

        
        而相应的page.xaml.cs(位于源码包中的IsolatedStore_Demo文件夹)代码如下:    

    public partial class Page : UserControl
     {
         
    private IsolatedStorageSettings appSettings =
            IsolatedStorageSettings.ApplicationSettings;
    //获取当前应用(silverlight Application) IsolatedStorageSettings  实例,范围在当前应用 
         
    //IsolatedStorageSettings appSettings =
            
    //IsolatedStorageSettings.SiteSettings;//获取当前应用(silverlight Application) IsolatedStorageSettings  实例,范围在当前域 

         
    public Page()
         {
             InitializeComponent();
             
    this.Loaded += new RoutedEventHandler(Page_Loaded);
         }

         
    void Page_Loaded(object sender, RoutedEventArgs e)
         {
             
    try
             {
                 
    //加载相应节点信息,首次运行时会报为空的错误
                 Recipient.Text = (string) appSettings["Recipient"];
                 Subject.Text 
    = (string)appSettings["Subject"];
                 Body.Text 
    = (string)appSettings["Body"];
             }
             
    catch (System.Collections.Generic.KeyNotFoundException ex)
             {
                 HtmlPage.Window.Alert(ex.Message);
             }

         }

         
    private void SaveToDraft_Click(object sender, RoutedEventArgs e)
         {
             
    try
             {   
    //添加相应节点信息
                 appSettings.Add("Recipient", Recipient.Text);
                 appSettings.Add(
    "Subject", Subject.Text);
                 appSettings.Add(
    "Body", Body.Text);
                 HtmlPage.Window.Alert(
    "已存入本地隔离存储区");
             }
             
    catch (ArgumentException ex)
             {
                 HtmlPage.Window.Alert(ex.Message);
             }
         }

         
    private void DeleteDraft_Click(object sender, RoutedEventArgs e)
         {
             
    try
             {
                 
    //移除相当节点信息
                 appSettings.Remove("Recipient");
                 appSettings.Remove(
    "Subject");
                 appSettings.Remove(
    "Body");
                 HtmlPage.Window.Alert(
    "已从本地隔离存储区中删除该草稿");
             }
             
    catch (ArgumentException ex)
             {
                 HtmlPage.Window.Alert(ex.Message);
             }

         }

         
    private void SaveToServer_Click(object sender, RoutedEventArgs e)
         {
             
    //创建EMAIL信息类,以此作为上传数据
             EmailInfo emailInfo = new EmailInfo()
             {
                 Recipientk__BackingField 
    = Recipient.Text,
                 Subjectk__BackingField 
    = Subject.Text,
                 Bodyk__BackingField 
    = Body.Text
             };

             EmailClient emailClient 
    = new EmailClient();
             
    //调用WCF方法
             emailClient.AcceptCompleted += new EventHandler<AcceptCompletedEventArgs>(email_AcceptCompleted);
             emailClient.AcceptAsync(emailInfo);
         }

         
    void email_AcceptCompleted(object sender, AcceptCompletedEventArgs e)
         {
             
    if (e.Result)
             {
                 HtmlPage.Window.Alert(
    "上传成功");
             }
             
    else
             {
                 HtmlPage.Window.Alert(
    "上传失败");
             }
         }

     }

      
         上面代码中就是将subject(主题),Recipient(收件人),Body(邮件内容)以键值对的方式存储在Isolate Store
    虚拟存储区中.而相应的WCF服务这里只是一种象征性的发送,并无什么实质内容,它在调用成功后会将结果以Bool型传
    递回来,以便进行接下来其它操作.

        好了,今天的内容就到这里了:)
       
        源代码下载链接,请点击这里:)

  • 相关阅读:
    SpringMVC截图版
    MySQL
    Mybatis-Spring
    Spring
    get
    log
    SpringBoot
    Mybatis和spingboot整合
    学习笔记-英语
    PartialView+$.reload()局部刷新
  • 原文地址:https://www.cnblogs.com/daizhj/p/1224135.html
Copyright © 2011-2022 走看看