我正在一个项目上,我必须创建一个线程来执行后台任务。 我不想每秒钟刷新一次计数,它应该随时间变化。 因此,我在motherClass.cs中的构造函数中创建了这样的线程:
Thread t = null;
if (StaticContext.MyThread == null)
StaticContext.MyThread = new Thread(new
ThreadStart(ThreadProc));
t = StaticContext.MyThread;
这是我的类StaticContext.cs中MyThread属性的定义:
public static Thread MyThread { get; set; }
此代码有效,在开始时我的线程仅创建一次。
现在,这是我的线程开始的定义:ThreadProc,它位于我的motherClass.cs中:
public async void SetNbVoyage()
{
List<LogiStock.DTO.Voyage> voyages = await
this._serviceVoyage.GetVoyageDispo();
if (_rdm == null)
{
Voyage = voyages.Count.ToString();
}
else
Voyage = _rdm.Next().ToString();
}
Random _rdm = null;
public void ThreadProc()
{
_rdm = new Random(100);
Task task = new Task(() =>
{
while (true)
{
SetNbVoyage();
Thread.Sleep(1000);
}
});
task.Start();
}
我在声明线程之前初始化了我的Property“ Voyage”。 问题:我的线程似乎无法正常工作,实际上,该值永远不变,而且我也不知道如何查看我的线程是否真正在工作。
答案 0 :(得分:0)
您应该使用Microsoft的Reactive Framework(又名Rx)-NuGet System.Reactive
并添加using System.Reactive.Linq;
-然后您可以执行以下操作:
Random _rdm = null;
IDisposable _subscription = null;
public void ThreadProc()
{
_rdm = new Random(100);
_subscription =
Observable
.Interval(TimeSpan.FromSeconds(1.0))
.Select(x => _rdm.Next().ToString())
.Subscribe(x => Voyage = x);
}
要停止间隔计时器,只需执行_subscription.Dispose();
。很简单。