* Makefile.am:
[monodevelop.git] / main / src / addins / Mono.Texteditor / Mono.TextEditor.Highlighting / WorkerThread.cs
blobf0cda8f58921829427548dbdfea35a8f4d24d75f
1 //
2 // WorkerThread.cs
3 //
4 // Author:
5 // Mike Krüger <mkrueger@novell.com>
6 //
7 // Copyright (C) 2008 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System;
30 using System.Threading;
32 namespace Mono.TextEditor
34 public abstract class WorkerThread
36 readonly object syncObject = new object();
38 bool isStopping = false;
39 bool isStopped = false;
41 public bool IsStopping {
42 get {
43 lock (syncObject) {
44 return isStopping;
49 public bool IsStopped {
50 get {
51 lock (syncObject) {
52 return isStopped;
56 // Thread thread;
58 public void Start ()
60 ThreadPool.QueueUserWorkItem (new WaitCallback (Run));
62 thread = new Thread (new ThreadStart (Run));
63 thread.Priority = ThreadPriority.Lowest;
64 thread.IsBackground = true;
65 thread.Start ();*/
68 public void Stop ()
70 lock (syncObject) {
71 isStopping = true;
75 public void WaitForFinish ()
77 int i = 0;
78 while (i < 100 && !IsStopped) {
79 Thread.Sleep (10);
80 i++;
82 //if (thread != null && !IsStopped)
83 // thread.Join (500);
86 void SetStopped ()
88 lock (syncObject) {
89 isStopped = true;
93 protected abstract void InnerRun ();
95 void Run (object stateInfo)
97 try {
98 while (!IsStopping) {
99 InnerRun ();
101 } catch (Exception ex) {
102 System.Console.WriteLine ("Exception in highlighting worker thread:", ex);
103 } finally {
104 SetStopped ();