0

WP7 を使用してニュース アプリ (feedrss) を実装しようとしていますが、このソリューションを試しましたが、うまくいきません。コードは次のとおりです。

 namespace PhoneApp1

 {
public partial class MainPage : PhoneApplicationPage
{
 public MainPage()
    {
        InitializeComponent();}
 private void Go_Click(object sender, RoutedEventArgs e)
    {

        WebClient _client = new WebClient();
        _client.DownloadStringCompleted += Feed;
        Location.Text = "http://www.aufaitmaroc.com/feeds/ma-vie.xml";
        _client.DownloadStringAsync(new Uri((Location.Text)));
        InitializeComponent();
    }
 private void Feed(object Sender, DownloadStringCompletedEventArgs e)
    {
        XElement _xml;
        try
        {
            if (!e.Cancelled)
            {
                _xml = XElement.Parse(e.Result);
                List<FeedItem> l = new List<FeedItem>();

                foreach (XElement value in _xml.Elements("channel").Elements("item"))
                {
                    FeedItem _item = new FeedItem();
                    _item.Title = value.Element("title").Value;

                    _item.enclosure = value.Element("enclosure").Attribute("url").Value;


                    _item.Description = Regex.Replace(value.Element("description").Value,
                    @"<(.|\n)*?>", String.Empty);
                    _item.Link = value.Element("link").Value;
                    _item.Guid = value.Element("guid").Value;
                    _item.Published = DateTime.Parse(value.Element("pubDate").Value);
                    l.Add(_item);



                    HttpWebRequest reqest1 = (HttpWebRequest)WebRequest.Create(_item.enclosure);
                    reqest1.BeginGetResponse(DownloadImageCallback, reqest1);
                    Thread.Sleep(1000);
                    WebClient client = new WebClient();
                    client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
                    client.OpenReadAsync(new Uri(_item.enclosure), client);

                }

                listBox.ItemsSource = l;

            }

        }
             catch
        {

        }
    }


    IsolatedStorageFile MyStore = IsolatedStorageFile.GetUserStoreForApplication();


    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        var resInfo = new StreamResourceInfo(e.Result, null);
        var reader = new StreamReader(resInfo.Stream);
        byte[] contents;
        using (BinaryReader bReader = new BinaryReader(reader.BaseStream))
        {
            contents = bReader.ReadBytes((int)reader.BaseStream.Length);
        }
        IsolatedStorageFileStream stream = MyStore.CreateFile("10.jpg");
        stream.Write(contents, 0, contents.Length);
        stream.Close();
    }


    void DownloadImageCallback(IAsyncResult result)
    {

        HttpWebRequest req1 = (HttpWebRequest)result.AsyncState;
        HttpWebResponse responce = (HttpWebResponse)req1.EndGetResponse(result);
        Stream s = responce.GetResponseStream();
        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            string directory = "Imagestest";
            if (!MyStore.DirectoryExists(directory))
            {
                MyStore.CreateDirectory(directory);
                 IsolatedStorageFileStream stream = MyStore.CreateFile("10.jpg");
                using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (var isoFileStream = myIsolatedStorage.CreateFile(directory + "//ANALYSE_10052013095620.jpg"))
                    {

                       var bitimage = new BitmapImage();


                        var wb = new WriteableBitmap(bitimage);

                        var width = wb.PixelWidth;
                        var height = wb.PixelHeight;
                      //  bitimage.SetSource = isoFileStream;
                        image1.Source = bitimage;

                       System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, isoFileStream, width, height, 0, 100);
                    }
                }
            }
            else
            {
                using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (myIsolatedStorage.FileExists(directory + "//ANALYSE_10052013095620.jpg"))
                    {
                        myIsolatedStorage.DeleteFile(directory + "//ANALYSE_10052013095620.jpg");
                    }

                    using (var isoFileStream = myIsolatedStorage.CreateFile(directory + "//ANALYSE_10052013095620.jpg"))
                    {

                        var bitimage = new BitmapImage();

                        var wb = new WriteableBitmap(bitimage);
                        var width = wb.PixelWidth;
                        var height = wb.PixelHeight;

                        System.Windows.Media.Imaging.Extensions.SaveJpeg(wb, isoFileStream, width, height, 0, 100);
                    }
                }
            }
        });
    }
   private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        FeedItem currentFeedItem = (FeedItem)listBox.SelectedItem;
        PhoneApplicationService.Current.State["FeedItem"] = currentFeedItem;

     }

このプロジェクトを実行すると、何も起こらず、フォルダーが作成されず、インターネットを停止すると、画像が表示されなくなります。

4

2 に答える 2

1

アプリで画像キャッシュが必要な場合は、JetImageLoaderライブラリを提案できます

特徴:

  • メモリへのキャッシュ (リスト、グリッドなどで非常に高速に動作するため)
  • キャッシングはIsolatedStorageFileです(毎回のリロードを防ぐため)
  • 完全に非同期 (遅延なし)
  • XAML Binding Converter を介して使用します。コードを変更する必要はありません。Image のコンバーターを宣言するだけです。

ただし、Windows Phone 8 以降のみをサポートしています

私はそのライブラリの作成者です。質問がある場合は、ここに書き込むか、github で問題を作成してください。

于 2013-10-27T01:47:11.710 に答える
0

画像をローカルに保存し、表示画像をローカルに保存する場合は、このサンプル http://code.msdn.microsoft.com/wpapps/CSWP8ImageFromIsolatedStora-8dcf8411を試してください。WP 8 では問題なく動作します。

于 2013-05-17T12:05:37.280 に答える