2012-07-26 22 views
2

我可以创建一个继承自我的Windows Phone应用程序的c#中的线程类的类。如何在c#中创建一个线程#

例如: 如果我的类名是 'MyClass的' 我要启动线程为new MyClass().Start();

就像下面的Java例子

public class TagIndexer 
{ 
    private static class Task 
    { 
     private String docId; 
     private String tags; 
     private String extension; 

     public Task(String docId, String tags, String extension) 
     { 
      this.docId = docId; 
      this.tags = tags; 
      this.extension = extension; 
     } 
    } 

    private static final LinkedList<Task> queue = new LinkedList<Task>(); 
    private static boolean isWorking = false; 

    private static class TaskRunner extends Thread 
    { 
     @Override 
     public void run() 
     { 
      while (true) 
      { 
       Task task; 
       synchronized (queue) 
       { 
        task = queue.poll(); 
        if (null == task) 
        { 
         isWorking = false; 
         break; 
        } 
        isWorking = true; 
       } 
       /* 
       * PROCESSING CODE 
       */ 
      } 
     } 
    } 

    public static void addDocument(int docId, String tags, String extension) 
    { 
     Task task = new Task(Integer.toString(docId), tags, extension); 

     synchronized (queue) 
     { 
      queue.add(task); 
      if (!isWorking) 
      { 
       new TaskRunner().start(); 
      } 
     } 
    } 
} 
+1

在.NET中的Thread类是密封,所以不,你不能创建一个从Thread继承的类。 – 2012-07-26 06:15:33

回答

1
new MyClazz().Start(); 

-

public abstract class MyThread 
{ 
    public abstract void Run(); 

    public void Start() 
    { 
     new Thread(Run).Start(); 
    } 
} 

public class MyClazz : MyThread 
{ 
    public override void Run() 
    { 
     Console.WriteLine("Hello World"); 
    } 
} 
0

在Windows Phone上,Thread是密封类,因此您可以没有从它继承。如果你想保持基于任务的方法,你可以创建一个包装线程实例的类。例如:

public abstract class Task 
{ 
    protected Thread InternalThread { get; set; } 

    protected abstract void Run(); 

    public void Start() 
    { 
     this.InternalThread = new Thread(this.Run); 
     this.InternalThread.Start();  
    } 
} 

当然,这只是一个例子。如果多次调用Start方法,您将不得不添加一些同步机制来创建多个线程。

然后,你可以继承它来创建自定义任务:

public class MyTask : Task 
{ 
    protected override void Run() 
    { 
     // Do something 
    } 
}