Nonsense: recently encountered projects found that when winform obtains a large amount of data, the interface is suspended and the experience is very poor. As a tester, we have the obligation and responsibility to raise bugs. Every test is faced with an interface that has been stuck for more than five seconds. It is really a kind of torture and a kind of suicide. You can use multiple threads to process data, or use the background to obtain data. Multi-threading can solve the problem, but it may be more complicated to dynamically load data. Because of multithreading, You need to execute a thread to update the data. The intelligence is not high enough. When using the background, you can report the obtained data at any time, which can be precise to a specific item, and it is easy to use, because it has been encapsulated.
Class used: backgroundworker under using system. componentmodel;
This class has four important methods: dowork, progresschanged, runworkercompleted, runworkerasync, two important attributes workersuppscanscancellation, workerreportsprogress
Method:
1. dowork: indicates what to do with the background. When binding time, the input parameter is the method name.
2. progresschanged: What should I do in the background when the progress changes, and the parameter passed in when the binding time is the method name
3. runworkercompleted
4. runworkerasync: enables backend and starts running in the background.
Attribute:
1. workersuppscanscancellation: whether asynchronous cancellation is supported
2. workerreportsprogress: whether to report progress updates. This attribute is very important and must be enabled to report progress.
The following example shows how to dynamically load data in the background:
Let's first make a simple interface
The required function is: Click start to start listing the file names under drive C one by one, and the progress bar shows the progress. The first method is to add the file name to the listview. In this way, thread. Sleep ( 500 ), Sleep for 0.5 seconds: View code
1 Public Void Add ( Object Sender, doworkeventargs E)
2 {
3 Directoryinfo di = New Directoryinfo ( @" C :/ " );
4 Foreach (Fileinfo item In Di. getfiles ())
5 {
6 Listviewitem lvt = New Listviewitem (); // use listviewitem to store the information of the obtained object.
7 Lvt. Text = item. fullname;
8 Lvt. subitems. Add (datetime. Now. tolongtimestring ());
9 Thread. Sleep ( 500 );
10 Bw. reportprogress (listview1.items. Count, lvt); // report the current progress and obtain the information of the file and the file.
11 }
12
13 }
Method 2: report the progress after obtaining the progress: View code
1 Public void progress ( Object sender, progresschangedeventargs e)
2 {< br> 3 progressbar1.value = E. progresspercentage; /// obtain the objects, used to change the progress of the progress bar
4 listviewitem Lv = E. userstate as listviewitem;
5 listview1.items. add (LV); /// Add the latest file information to listview
6 }
The third method looks like a chicken in this example. The event is executed after the background is completed:
1Public VoidEnd (ObjectSender, asynccompletedeventargs E)
2{
3Progressbar1.value =0;//Progress bar cleared 0
4 }
Finally, write the following method in the double-click event: View code
1 Private Void Button#click (Object Sender, eventargs E)
2 {
3 Directoryinfo di = New Directoryinfo ( @" C :/ " );
4 Fileinfo [] Fi = Di. getfiles ();
5 Progressbar1.maximum = Fi. Length- 1 ; // Set the maximum value of the progress bar
6 Bw. workersuppscanscancellation = True ;
7 Bw. workerreportsprogress = True ;
8 Bw. dowork + = New Doworkeventhandler (ADD ); // Bind event
9 Bw. progresschanged + = New Progresschangedeventhandler (Progress );
10 Bw. runworkercompleted + = New Runworkercompletedeventhandler (end );
11 Bw. runworkerasync ();
12 }
Note: When defining three methods in the background, the format must be a template. You can run the following results. Obviously, this is what the user needs. If you want to retrieve large data volumes at a time or operate them in a single thread, the experience is very poor. If software is to be recognized, the user experience plays a very important role. Although a software uses a very advanced technology, the user experience is very poor, users often weigh the option that is more convenient.
:< span style = "color: # ff0000; "> http://files.cnblogs.com/Zeech-Lee/%E5%90%8E%E5%8F%B0%E6%93%8D%E4%BD%9C.rar If you like me, follow me!