2012-07-26 2 views
2

Могу ли я создать класс, унаследованный от класса thread в C#, для моего приложения Windows Phone.Как создать поток в 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. –

ответ

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 является закрытым классом, поэтому вы nnot наследовать от него. Если вы хотите сохранить подход на основе задач, вы можете просто создать класс, который будет обертывать экземпляр потока. Что-то вроде:

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 
    } 
} 
Смежные вопросы