English 中文(简体)
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 I tried to display a loading message first before a user selected the file to give them a visual cue that something was happening:

loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) { 
    // process really big file
}

Unfortunately, this still completely freezes up the UI while the file is being processed.

What I have found that works perfectly is if I fire a MessageBox right after the file selection. I think it does a "DoEvents" type call under the hood to get flush event/ui items in the runtime.

loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
    MessageBox.Show("Sync!");
    // process really big file
}

In cases like this the big file is still processed as slowly but the loading message is displayed and the screen UI gets synched up (I m doing some other things in the real thing such as showing a wait cursor).

Question:

Silverlight has no DoEvents functionality. Is there a call I can make besides MessageBox.Show to have the same effect of synchronizing the UI and preventing the OpenFileDialog from freezing up the UI?

最佳回答

Use a BackgroundWorker to execute the heavy computation in the background. When you want to notify the UI that the operation is complete, the RunWorkerCompleted event of the aforementioned class can be used. The alternative to this is to use a completely separate thread and then callback to the UI thread using Dispatcher.BeginInvoke(). Remember that with .NET in a separate thread you cannot access any GUI components without this kind of synchronization.

问题回答

Use the BackgroundWorker class to process your really big file on a background thread? Here a link for you: How to: Use a BackgroundWorker





相关问题
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 ...

热门标签