Silverlight图像上传器-帮助!
以下是图像大小调整器/压缩器/上载器的主要代码。这是我的第一个silverlight项目,我在线程和gui更新以及webclient部分方面遇到了问题,webclient部分无法正常工作。据我所知,调整和重新采样似乎可以执行。问题在于gui的更新和上传。希望我已经提供了足够的信息让你们了解正在发生的事情 如果你想帮助我,并需要进一步的信息,我可以根据你的要求将项目以邮政编码的形式发送给你,不包括敏感代码 谢谢你的帮助Silverlight图像上传器-帮助!,silverlight,user-interface,synchronization,multithreading,image-uploading,Silverlight,User Interface,Synchronization,Multithreading,Image Uploading,以下是图像大小调整器/压缩器/上载器的主要代码。这是我的第一个silverlight项目,我在线程和gui更新以及webclient部分方面遇到了问题,webclient部分无法正常工作。据我所知,调整和重新采样似乎可以执行。问题在于gui的更新和上传。希望我已经提供了足够的信息让你们了解正在发生的事情 如果你想帮助我,并需要进一步的信息,我可以根据你的要求将项目以邮政编码的形式发送给你,不包括敏感代码 谢谢你的帮助 namespace ulx { public partial cl
namespace ulx
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
//Import images from file browse dialog
this.Browse.Click += ImportFiles;
this.thw.Text = "0";
this.thh.Text = "0";
this.rh.Text = "0";
this.rw.Text = "0";
this.Exec.IsEnabled = false;
//Invoke the resize/compressions/uploader sequence
this.Exec.Click += ExecP;
this.mProgressBar.Visibility = Visibility.Collapsed;
this.transc.Visibility = Visibility.Collapsed;
}
public FileInfo [] Files;
//select jpegs
public void ImportFiles(object sender,RoutedEventArgs e)
{
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = "JPEG Files (*.jpg;*.jpeg)|*.jpg;*.jpeg";
openDialog.Multiselect = true;
if (openDialog.ShowDialog().GetValueOrDefault(false))
{
this.Files = (FileInfo [])openDialog.Files;
this.Imgcount.Text = "Image Count: "+this.Files.Length;
this.Exec.IsEnabled = true;
}
}
public void ExecP(object Sender, RoutedEventArgs e)
{
//the main process
this.Process();
}
public void Process()
{
Configuration.thw = Convert.ToInt32(this.thw.Text);
Configuration.thh = Convert.ToInt32(this.thh.Text);
Configuration.rh = Convert.ToInt32(this.rh.Text);
Configuration.rw = Convert.ToInt32(this.rw.Text);
Configuration.dest = this.Dest.Text;
if (Configuration.dest == "")
{
System.Windows.Browser.HtmlPage.Window.Alert("Invalid Dest:");
}
if (Configuration.thw == 0 || Configuration.thh == 0 || Configuration.rw == 0 || Configuration.rh == 0)
{
System.Windows.Browser.HtmlPage.Window.Alert("Invalid Resize Definitions");
return;
}
//hide and disable a bunch of gui controls
this.Browse.IsEnabled = false;
this.thw.Visibility = Visibility.Collapsed;
this.thh.Visibility = Visibility.Collapsed;
this.rw.Visibility = Visibility.Collapsed;
this.rh.Visibility = Visibility.Collapsed;
this.c1.Visibility = Visibility.Collapsed;
this.c2.Visibility = Visibility.Collapsed;
this.c3.Visibility = Visibility.Collapsed;
this.c4.Visibility = Visibility.Collapsed;
this.Dest.Visibility = Visibility.Collapsed;
this.transc.Visibility = Visibility.Visible;
//enable and show progressbar
this.mProgressBar.Visibility = Visibility.Visible;
this.mProgressBar.Minimum = 0;
this.mProgressBar.Maximum = this.Files.Length * 2;
int i = 0;
foreach (FileInfo file in this.Files)
{
//Resize thumb
WriteableBitmap wb = null;
this.transc.Text = "Creating Thumb (" + Configuration.thw + "," + Configuration.thh + ") :" + file.Name;
using (FileStream stream = file.OpenRead())
{
wb = ulxConverter.Imager.GetImageSource(stream, Configuration.thw, Configuration.thh);
}
string text = "";
// compress thumb
using (Stream Source = ulxUtil.JpgEncoder.Encode(wb, 50))
{
StreamReader reader = new StreamReader(Source);
text = reader.ReadToEnd();
}
//upload thumb
Thread.Sleep(1);
this.transc.Text = "Uploading Thumb: " + file.Name;
Uploader tu = new Uploader("/cgi-bin/SIDES/ulx.cgi", "user", "pass", Configuration.dest, "" + file.Name, 1, text);
Thread myThread = new Thread(new ThreadStart(tu.doit));
myThread.Start();
this.mProgressBar.Value = i++;
this.transc.Text = "Creating Resample (" + Configuration.rw + "," + Configuration.rh + ") :" + file.Name;
wb = null;
//create resample
using (FileStream stream = file.OpenRead())
{
wb = ulxConverter.Imager.GetImageSource(stream, Configuration.rw, Configuration.rh);
}
Thread.Sleep(1);
text = "";
//compress resample
using (Stream Source = ulxUtil.JpgEncoder.Encode(wb, 20))
{
StreamReader reader = new StreamReader(Source);
text = reader.ReadToEnd();
}
Thread.Sleep(1);
//uploud resample
this.transc.Text = "Uploading Resample: " + file.Name;
Uploader ru = new Uploader("/cgi-bin/SIDES/ulx.cgi", "user", "pass", Configuration.dest, file.Name, 0, text);
Thread myThreadT = new Thread(new ThreadStart(ru.doit));
myThreadT.Start();
this.mProgressBar.Value = i++;
//end of loop
}
//ok, we are done. hide progress and show hidden controls
this.mProgressBar.Visibility = Visibility.Collapsed;
this.transc.Visibility = Visibility.Collapsed;
this.Browse.IsEnabled = true;
this.thw.Visibility = Visibility.Visible;
this.thh.Visibility = Visibility.Visible;
this.rw.Visibility = Visibility.Visible;
this.rh.Visibility = Visibility.Visible;
this.c1.Visibility = Visibility.Visible;
this.c2.Visibility = Visibility.Visible;
this.c3.Visibility = Visibility.Visible;
this.c4.Visibility = Visibility.Visible;
this.Dest.Visibility = Visibility.Visible;
}
}
public static class Configuration
{
public static int thw;
public static int thh;
public static int rw;
public static int rh;
public static string src;
public static string dest;
}
public class Uploader
{
public string url;
public string user;
public string pass;
public string path;
public string source;
public int MODE;
public string fn;
public string imgdata;
private bool is_mac_unix = false;
public Uploader(string url,string user,string pass,string path,string fn,int MODE,string imgdata)
{
this.url = url;
this.user = user;
this.pass = pass;
this.path = path;
this.fn = fn;
this.MODE = MODE;
this.imgdata = imgdata;
string t = ""+Environment.OSVersion;
if(t.IndexOf("x") != -1)
{
this.is_mac_unix = true;
}
}
private ManualResetEvent mre = new ManualResetEvent(false);
public void doit()
{
//string BODY = "datastring";
WebClient sender = new WebClient();
sender.OpenReadCompleted += new OpenReadCompletedEventHandler(this.ReadComplete);
sender.OpenReadAsync(new Uri(this.url + "?blob=" + this.imgdata,UriKind.Absolute));
mre.WaitOne();
}
public bool T = false;
public void ReadComplete(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
this.T = true;
}
mre.Set();
}
正如您在另一个问题中指出的,您确实不想使用
ManualResetEvent
之类的东西。当我有机会的时候,我会通过重构你的代码来更新这个答案。但是,解决方案的关键项是BackgroundWorker
类。这将帮助您从主UI线程中完成所有这些工作。正如您在另一个问题中指出的,您确实不想使用ManualResetEvent
之类的东西。当我有机会的时候,我会通过重构你的代码来更新这个答案。但是,解决方案的关键项是BackgroundWorker
类。这将帮助您完成主UI线程的所有工作。提示:您应该考虑使用string.IsNullOrEmpty(..)而不是mystring==”“”提示:您应该考虑使用mystring=string.Empty而不是mystring=“”(哨声)这将需要一些排序。提示:您应该考虑使用string.IsNullOrEmpty(..)提示:您应该考虑使用mystring=string.Empty而不是mystring=“”(Whists)这将需要一些整理。