誰かがシングルトンについて私を裏返す前に、このインスタンスでは、コード全体でこのオブジェクトを広く使用しているシングルトンを持っていることが理にかなっています。私は聞きたいですが、私はこれがこの投稿の焦点ではないことを願っています。スレッディングとシングルトン
私はクラススケジューラへの参照を失っており、内部にはもはや起動しないタイマーティックがあります。これはシングルトンの方法で使用されていて、参照が失われてGCであるためですか?それは他のクラス
ApplicationContext.Current.Scheduler.Add(DateTime.Now.AddSeconds(1), ResetBackColor);
ApplicationContext
で、次の方法でアクセスされ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace MessageQueueInterface
{
public class Scheduler
{
private const int _interval = 1000;
private readonly Dictionary<DateTime, Action> _scheduledTasks = new Dictionary<DateTime, Action>();
private readonly Timer _mainTimer;
public Scheduler()
{
_mainTimer = new Timer();
_mainTimer.Interval = _interval;
_mainTimer.Tick += MainTimer_Tick;
_mainTimer.Start();
}
void MainTimer_Tick(object sender, EventArgs e)
{
CheckStatus();
}
public void Add(DateTime timeToFire, Action action)
{
lock (_scheduledTasks)
{
if (!_scheduledTasks.Keys.Contains(timeToFire))
{
_scheduledTasks.Add(timeToFire, action);
}
}
}
public void CheckStatus()
{
Dictionary<DateTime, Action> scheduledTasksToRemove = new Dictionary<DateTime, Action>();
lock (_scheduledTasks)
{
foreach (KeyValuePair<DateTime, Action> scheduledTask in _scheduledTasks)
{
if (DateTime.Now >= scheduledTask.Key)
{
scheduledTask.Value.Invoke();
scheduledTasksToRemove.Add(scheduledTask.Key, scheduledTask.Value);
}
}
}
foreach (KeyValuePair<DateTime, Action> pair in scheduledTasksToRemove)
{
_scheduledTasks.Remove(pair.Key);
}
}
}
}
も
私のシングルトンである私は、datetimeオブジェクトは辞書のための最高のKEYではないことを承知していますが、それは私のここの目的に合っています
ここはシングルトンです
public class ApplicationContext
{
private static ApplicationContext _context;
private Scheduler _scheduler;
public Scheduler Scheduler
{
get { return _scheduler; }
}
private void SetProperties()
{
_scheduler = new Scheduler();
}
public static ApplicationContext Current
{
get
{
if (_context == null)
{
_context = new ApplicationContext();
_context.SetProperties();
}
return _context;
}
}
}
re:singletons:いつから「このオブジェクトは広く使用されていましたか」を意味する「これはシングルトンでなければならない」という意味ですか?多くの場合、それは「それは(シングルトンではなく)グローバルでなければなりません」と、おそらく「あなたがリファクタリングする必要がある」、または暗示、あるいはいくつかのケースでは、「ちょうどそれを吸うと、オブジェクトへの周りの参照を渡す」 – jalf
はです意味しますあなたのアプリケーションはマルチスレッドですか? –
あなたがシングルトンを打ち負かすことについて免責を逃したと思います。これはシングルトンのディスカッションスレッドではありません。 – JoshJordan