ThreadedServiceBase.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System.Threading;
  2. namespace VCommon.Services
  3. {
  4. public abstract class ThreadedServiceBase : IService
  5. {
  6. private Thread _innerThread;
  7. public string Tag { get; }
  8. public bool IsBackground { get; }
  9. protected ThreadedServiceBase(string tag = null, bool isBackground = true)
  10. {
  11. Tag = tag;
  12. IsBackground = isBackground;
  13. }
  14. public void Start()
  15. {
  16. if (null != _innerThread) return;
  17. OnStart();
  18. _innerThread = new Thread(Run) { IsBackground = IsBackground };
  19. if (null != Tag) _innerThread.Name = Tag;
  20. _innerThread.Start();
  21. }
  22. protected void Join(int ms) => _innerThread.Join(ms);
  23. public void Stop()
  24. {
  25. if (null == _innerThread) return;
  26. OnStop();
  27. _innerThread.Abort();
  28. _innerThread = null;
  29. }
  30. protected virtual void OnStop()
  31. {
  32. }
  33. protected virtual void OnStart()
  34. {
  35. }
  36. protected abstract void Run();
  37. }
  38. }