2012-06-16 3 views
2

Im делает программу, которая работает хорошо, за исключением того, что я начал создавать систему обновлений и как-то ее не работал. Экран заставки проверяет наличие обновлений, используя webClient, который теперь также кажется ошибочным. Я настроил его так, чтобы экран заставки загружал текстовый файл. Если версии несовместимы, начинается отдельная форма и для загрузки обновления используется webClient. Я создал эту форму дважды. Он имеет 1 progressBar, 1 webClient, фон изображения и 1 ярлык. Обновление должно быть загружено, показать его прогресс на панели, а затем открыть программу обновления и закрыть основную программу. В первый раз, когда я создал форму, я запустил ее и заморозил и не загружал файл. После того, как я остановил отладку, окно дизайна визуального C# express 2010 сработает, и мне пришлось перезапустить vC#. В окне будут показаны все элементы, добавленные мной, кроме webClient. Так что я снова попытался отладки и я получил это сообщение:WebClient выбрасывает «Нет данных для кодирования 1252»

Error 1 Invalid Resx file. Type in the data at line 138, position 5, cannot be loaded because it threw the following exception during construction: No data is available for encoding 1252. C:\Users\DjLyriz\documents\visual studio 2010\Projects\TubeRip\TubeRip\updates.resx TubeRip 

Error 2 TargetInvocationException: Type in the data at line 138, position 5, cannot be loaded because it threw the following exception during construction: No data is available for encoding 1252. 
at System.Resources.ResXResourceReader.ParseXml(XmlTextReader reader) 
at System.Resources.ResXResourceReader.EnsureResData() 
at System.Resources.ResXResourceReader.GetEnumerator() 
at Microsoft.Build.Tasks.ProcessResourceFiles.ReadResources(ReaderInfo readerInfo, IResourceReader reader, String fileName) 
at Microsoft.Build.Tasks.ProcessResourceFiles.ReadResources(String filename, Boolean shouldUseSourcePath) 
at Microsoft.Build.Tasks.ProcessResourceFiles.ProcessFile(String inFile, String outFileOrDir) 
XmlException: Type in the data at line 138, position 5, cannot be loaded because it threw the following exception during construction: No data is available for encoding 1252. Line 138, position 5. 

NotSupportedException: No data is available for encoding 1252. 
at System.Text.BaseCodePageEncoding.LoadCodePageTables() 
at System.Text.BaseCodePageEncoding..ctor(Int32 codepage, Int32 dataCodePage) 
at System.Text.SBCSCodePageEncoding..ctor(SerializationInfo info, StreamingContext context) 
C:\Users\DjLyriz\documents\visual studio 2010\Projects\TubeRip\TubeRip\updates.resx TubeRip 

Так я удалил WebClient из формы и повторен. Я получил ту же ошибку во второй раз. Итак, я ошибся в первой ошибке и нашел один ответ на hackforums без исправлений. И теперь я полностью потерял. Все мои webClients, похоже, делают это сейчас, и я понятия не имею, почему.

Вот код моей заставки:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Net; 

namespace TubeRip 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     timer1.Start(); 
     getupdates(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     timer2.Start(); 
    } 

    private void timer2_Tick_1(object sender, EventArgs e) 
    { 
     timer1.Stop(); 
     label1.Text = "Loading Core Components..." + " " + progressBar1.Value.ToString() + "%"; 

     if (progressBar1.Value < 20) 
     { 
      progressBar1.Value += 1; 
     } 
     else 
     { 
      timer3.Start(); 
     } 
    } 
    private void end() 
    { 
     timer7.Stop(); 
     mainpage home = new mainpage(); 
     home.Show(); 
     this.Dispose(false); 
    } 

    private void timer3_Tick(object sender, EventArgs e) 
    { 
     timer2.Stop(); 
     label1.Text = "Loading Encryption Algorithyms..." + " " + progressBar1.Value.ToString() + "%"; 
     if (progressBar1.Value < 40) 
     { 
      progressBar1.Value += 1; 
     } 
     else 
     { 
      timer4.Start(); 
     } 
    } 

    private void timer4_Tick(object sender, EventArgs e) 
    { 
     timer3.Stop(); 
     label1.Text = "Enabling Download Services..." + " " + progressBar1.Value.ToString() + "%"; 
     if (progressBar1.Value < 60) 
     { 
      progressBar1.Value += 1; 
     } 
     else 
     { 
      timer5.Start(); 
     } 

    } 

    private void timer5_Tick(object sender, EventArgs e) 
    { 
     timer4.Stop(); 
     label1.Text = "Disabling Youtube's Download Protection..." + " " + progressBar1.Value.ToString() + "%"; 
     if (progressBar1.Value < 80) 
     { 
      progressBar1.Value += 1; 
     } 
     else 
     { 
      timer6.Start(); 
     } 

    } 

    private void timer6_Tick(object sender, EventArgs e) 
    { 
     timer5.Stop(); 
     label1.Text = "Drawing GUI" + " " + progressBar1.Value.ToString() + "%"; 
     if (progressBar1.Value < 90) 
     { 
      progressBar1.Value += 1; 
     } 
     else 
     { 
      timer7.Start(); 
     } 
    } 

    private void timer7_Tick(object sender, EventArgs e) 
    { 
     timer6.Stop(); 
     label1.Text = "Creating The first Humanlike Robot..." + " " + progressBar1.Value.ToString() + "%"; 
     if (progressBar1.Value < 100) 
     { 
      progressBar1.Value += 1; 
     } 
     else 
     { 
      end(); 
     } 
    } 
    private void getupdates() 
    { 
     try 
     { 
      string updateurl = "http://dl.dropbox.com/u/22054429/TubeRip_version.txt"; 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(updateurl); 
      WebResponse response = request.GetResponse(); 
      System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("windows-1252")); 
      string update = sr.ReadToEnd(); 
      int build = Convert.ToInt32(update); 
      int thisbuild = 2; 
      if (build > thisbuild) 
      { 
       label2.Visible = true; 
       TubeRip.Properties.Settings.Default.UpdateAvail = true; 
      } 
      else 
      { 
       label2.Visible = false; 
       TubeRip.Properties.Settings.Default.UpdateAvail = false; 
      } 
     } 
     catch 
     { 
      MessageBox.Show("Unable to connect to update server! Please try again later."); 
     } 
    } 

} 
} 

А вот код из моей программы обновления:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 
using System.Net; 

namespace TubeRip 
{ 
public partial class updates : Form 
{ 
    public updates() 
    { 
     InitializeComponent(); 
    } 

    private void updates_Load(object sender, EventArgs e) 
    { 
     Uri update = new Uri("http://dl.dropbox.com/u/22054429/TubeRip_Installer.exe"); 
     webClient1.DownloadFileAsync(update, "update.exe"); 
     webClient1.DownloadProgressChanged +=new DownloadProgressChangedEventHandler(webClient1_DownloadProgressChanged); 
     webClient1.DownloadFileCompleted += new AsyncCompletedEventHandler(webClient1_DownloadFileCompleted); 
    } 
    void webClient1_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
    { 
     Process.Start("update.exe"); 
     Environment.Exit(0); 
    } 
    void webClient1_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
    { 
     progressBar1.Value = e.ProgressPercentage; 
     label1.Text = "Downloading Updates Please Wait... " + e.ProgressPercentage.ToString() + "%"; 
    } 
} 
} 
+0

Никто не мог помочь в этом, поэтому я провел некоторое исследование и решил вместо этого использовать кодировку UTF-8 в веб-клиенте, что не вызывает эту ошибку. –

ответ

1

я не нашел никакого результата для моей конкретной ошибки, но я нашел способ обойти его. Вместо того, чтобы использовать стандартную кодировку для webClient, я сам установил кодировку UTF-8, которая не бросает эту ошибку. Модифицированный код - это то, что в конечном итоге работает.

WebClient client = new WebClient(); 
client.Encoding = System.Text.Encoding.UTF8; 
Uri update = new Uri(uri); 
client.DownloadFileAsync(update, "update.exe"); 
client.DownloadProgressChanged +=new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); 
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); 

В противном случае я не нашел никаких проблем с этой проблемой, и никаких оснований для появления этой проблемы не было.