方法在哪个线程中运行
本文关键字:运行 线程 方法 | 更新日期: 2023-09-27 18:06:21
我想要一个类,它能够在一个线程中执行一个定时任务,从它的父线程分开,但我有点困惑哪个线程的各个部分属于,任何信息将不胜感激。
我的目的是使定时任务独立于父任务运行,因为父包装对象控制的定时任务不止一个。
这是我想到的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
public class timed_load_process {
private object _lock;
protected string process;
protected Timer timer;
protected bool _abort;
protected Thread t;
protected bool aborting { get { lock (_lock) { return this._abort; } } }
public timed_load_process(string process) {
this._abort = false;
this.process = process;
this.t = new Thread(new ThreadStart(this.threaded));
this.t.Start();
}
protected void threaded() {
this.timer = new Timer(new TimerCallback(this.tick), false, 0, 1000);
while (!this.aborting) {
// do other stuff
Thread.Sleep(100);
}
this.timer.Dispose();
}
protected void tick(object o) {
// do stuff
}
public void abort() { lock (_lock) { this._abort = true; } }
}
由于计时器是在线程内部实例化的,它是在线程t
中操作,还是在线程timed_load_process
中操作,我假设操作tick将在与定时器t
相同的线程中操作。
以:
结尾public class timed_load_process : IDisposable {
private object _lock;
private bool _tick;
protected string process;
protected Timer timer;
protected bool _abort;
public bool abort {
get { lock (_lock) { return this._abort; } }
set { lock (_lock) { this.abort = value; } }
}
public timed_load_process(string process) {
this._abort = false;
this.process = process;
this.timer = new Timer(new TimerCallback(this.tick), false, 0, 1000);
}
public void Dispose() {
while (this._tick) { Thread.Sleep(100); }
this.timer.Dispose();
}
protected void tick(object o) {
if (!this._tick) {
this._tick = true;
// do stuff
this._tick = false;
}
}
}
看起来你正在使用System.Threading.Timer
。如果是,则tick
方法在池线程上运行。它肯定是而不是应用程序的主线程。
只是为了你的信息,Windows窗体定时器执行GUI线程上经过的事件。
System.Timers.Timer
的默认行为是在池线程上执行Elapsed
事件。但是,如果将SynchronizingObject
设置为引用Windows窗体组件,则该事件将被封送到GUI线程。
From http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx
"该方法不在创建计时器的线程上执行;它在系统提供的ThreadPool线程上执行。"