我正在制作一个运行良好的程序,除了我开始创建一个更新系统,不知何故它不起作用。启动屏幕使用webClient检查更新,现在看起来也是错误的。我进行了设置,以便启动画面下载文本文件。如果版本不匹配,则会启动单独的表单并使用webClient下载更新程序。我已经两次创建了这个表单。它有1个progressBar,1个webClient,一个图像背景和一个标签。应该下载更新,在条形图上显示其进度,然后打开更新程序并关闭主程序。我第一次创建表单,我运行它,它会冻结,而不是下载文件。在我停止调试之后,visual c#express 2010的设计窗口会崩溃,我不得不重新启动vc#。窗口将显示我添加的除webClient之外的所有项目。所以我再次尝试调试,我收到了这条消息:
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并重试了。我第二次得到了同样的错误。所以我用Google搜索了第一个错误,并在没有修复的hackforums上找到了一个响应。现在我完全迷失了。我的所有webClient现在似乎都在这样做,我不明白为什么。
以下是我的启动画面中的代码:
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 :(得分: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);
否则,我找不到解决此问题的方法,也没有理由出现此问题。