我可以为我的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();
}
}
}
}
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");
}
}
在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
}
}
请参阅MSDN
中关于BackgroundAgent
的文章:
- Windows Phone的后台代理概述