English 中文(简体)
Silverlight, Updating the UI during processing
原标题:

I have a simple silverlight multifile upload application, and i want to provide the user with some feedback, right now its only in a test phase and i dont have the webservice. Somehow i cant get the ui to update:

private void DoUpload()
    {
        foreach (UploadFile file in fileInfos)
        {
            int BUFFERSIZE = 1024;
            int offset = 0; //get from webservice, when partial file
            FileStream s = file.FileInfo.OpenRead();
            byte[] buffer = null;
            long remainingBytes = s.Length - offset;
            while (remainingBytes > 0)
            {
                if (remainingBytes < BUFFERSIZE)
                {
                    buffer = new byte[remainingBytes];
                    BUFFERSIZE = (int)remainingBytes;
                }
                else if (remainingBytes > BUFFERSIZE)
                {
                    buffer = new byte[BUFFERSIZE];
                }

                s.Read(buffer, 0, BUFFERSIZE);
                //push to webservice
                offset += BUFFERSIZE;
                int newPercentage = offset / (int)file.FileInfo.Length * 100;
                file.Percentage = newPercentage;
                remainingBytes = s.Length - offset;
                System.Threading.Thread.Sleep(10);
            }
            file.Percentage = 100;
            file.ImageSource = "accept.png";
        }
    }

The UploadFile is bound to the ui, so changes to this file will reflect in the UI, Problem is that all this upload takes too long (simulated it with the sleep) and during that tie UI is not getting updated, any idea on how to go about doing this?

最佳回答

What you need to do is run this method on a new thread (i.e. not the UI-thread). If you block the UI thread (e.g. with a sleep), then it is blocked from updating or responding to the user in any way.

If you need to modify anything about the UI, it has to be done from the UI thread. So if you need to change the UI, and your code is running on a different thread, you can use the Dispatcher.BeginInvoke method to dispatch an operation to the UI thread. You can access the application s Dispatcher object via: Deployment.Current.Dispatcher.

问题回答

I thought Silverlight only allow asynchronous calls. If you are doing things asynchronously then your use of Sleep is misleading as the upload wouldn t block the UI.





相关问题
Silverlight Rich text box control

Our team decided that we need our own custom Rich text box control for Silverlight app we are developing. We looked at existing controls mentioned at A good rich text control for Silverlight but ...

Silverlight ImageBrush not rendering (with Bing Map Control)

I m trying to add an image to a Pushpin instance from the Silverlight Bing Map Control, but I can t seem to get it to render (the pushpin renders fine). This is probably a general WPF question rather ...

Silverlight OpenFileDialog DoEvents equivalent

I m processing large files after they are selected by the user. My code looks like the following: if (FileDialog.ShowDialog() == true) { // process really big file } This freezes up the UI so ...

list of controls with templates in silverlight

Does anyone know where to find a list of controls that you can set the template on in Silverlight? I ve wasted several hours now trying to create control templates only to find that the control doesn ...

Silverlight, Updating the UI during processing

I have a simple silverlight multifile upload application, and i want to provide the user with some feedback, right now its only in a test phase and i dont have the webservice. Somehow i cant get the ...

Silverlight 3 - FindName returns null

This looks a bug to me.. Using Silverlight 3 and i have a user control defined in XAML and trying to access the object during runtime returns a null. <Grid> <common:CommonGridEditPanel x:...

silverlight 3 collection binding

Someone please help me understand why this binding does not work... I have a class called SelectionManager with a property called dates which is populated by a WCF service. The property is an ...

热门标签