2012-05-27 2 views
0

Я хочу заставить свою программу подождать несколько минут после чего-то, а затем сделать что-то еще, в asp.net и silverlight. (В деталях, я хочу загрузить изображение с помощью программы silverlight, а затем показать ее на моей странице с помощью элемента управления Image. Но когда я загружаю изображения размером около 6 КБ или выше, изображение не отображается, однако это был успешно взломан. Я думаю, что ожидание некоторых моментов может решить проблему) Может ли кто-нибудь мне навестить? спасибоwait() в asp.net (показано загруженное изображение)

+0

ожидания на клиенте или на стороне сервера. Я считаю, что задержка не решит проблему. Ваша проблема должна быть связана с синхронизацией чего-то, что вы забыли. – Aristos

+0

У него нет проблем при работе на локальном хосте, я думаю, что при загрузке не требуется время в мушке. –

+0

Это звучит как какое-то состояние гонки. Это поможет, если вы разместите свой код. – tzerb

ответ

0

Я использую код в this page

Это код в MyPage.Xaml:

private void UploadBtn_Click(object sender, RoutedEventArgs e) 
    { 

     OpenFileDialog dlg = new OpenFileDialog(); 

     dlg.Multiselect = false; 
     dlg.Filter = UPLOAD_DIALOG_FILTER; 
     if ((bool)dlg.ShowDialog()) 
     { 
      progressBar.Visibility = Visibility.Visible; 
      progressBar.Value = 0; 
      _fileName = dlg.File.Name; 
      UploadFile(_fileName, dlg.File.OpenRead()); 

     } 

     else 
     { 

      //user clicked cancel 

     } 

    } 


    private void UploadFile(string fileName, Stream data) 
    { 
     // Just kept here 
     progressBar.Maximum = data.Length; 

     UriBuilder ub = new UriBuilder("http://mysite.com/receiver.ashx"); 

     ub.Query = string.Format("fileName={0}", fileName); 
     WebClient c = new WebClient(); 

     c.OpenWriteCompleted += (sender, e) => 
     { 

      PushData(data, e.Result); 

      e.Result.Close(); 

      data.Close(); 

     }; 

     try 
     { 
      c.OpenWriteAsync(ub.Uri); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 

    } 
    private void PushData(Stream input, Stream output) 
    { 
     byte[] buffer = new byte[input.Length]; 

     int bytesRead; 
     while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      output.Write(buffer, 0, buffer.Length); 
     } 
     progressBar.Value += input.Length; 

     if (progressBar.Value >= progressBar.Maximum) 
     { 
      progressBar.Visibility = System.Windows.Visibility.Collapsed; 
      loadImage(); 
     } 
    } 
private void loadImage() 
    { 
     Uri ur = new Uri("http://mysite.com/upload/" + _fileName); 
     img1.Source = new BitmapImage(ur); 
    } 

И это receiver.ashx:

public void ProcessRequest(HttpContext context) 
{ 
    string filename = context.Request.QueryString["filename"].ToString(); using (FileStream fs = File.Create(context.Server.MapPath("~/upload/" + filename))) 
    { 

     SaveFile(context.Request.InputStream, fs); 

    } 

} 
private void SaveFile(Stream stream, FileStream fs) 
{ 

    byte[] buffer = new byte[stream.Length]; 

    int bytesRead; 
    while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0) 
    { 

     fs.Write(buffer, 0, bytesRead); 

    } 

} 
Смежные вопросы