Hy All!ThreadPool.QueueUserWorkItem()メソッドを起動したときにDispatcherTimerが動作しなくなりました
自分のWPFアプリケーション用のTimerManagerクラスを作成します。 このクラスは、ディスパッチャタイマの開始と停止を処理します。
public static class TimerManager
{
static DispatcherTimer disTimer;
static Model m = Model.GetInstance();
static TimerManager()
{
disTimer = new DispatcherTimer();
disTimer.Tick += disTimer_tick;
disTimer.Interval = new TimeSpan(0, 0, 1);
}
public static void StartTimer()
{
disTimer.Start();
}
public static void StopTimer()
{
disTimer.Stop();
}
private static void disTimer_tick(object sender, EventArgs e)
{
m.Tick++;
}
}
と私は、これはUIで刻々と過ぎを表すモデルクラスを作成します。ここで クラスです。 (MainWindow.xaml - > xyテキストボックステキストフィールド{Binding Tick}のバインディング)。
class Model : INotifyPropertyChanged
{
private Model()
{
}
static Model instance;
public static Model GetInstance()
{
if (instance == null)
{
instance = new Model();
}
return instance;
}
int tick;
public event PropertyChangedEventHandler PropertyChanged;
public void OnNotifyPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}
public int Tick
{
get
{
return tick;
}
set
{
tick = value;
OnNotifyPropertyChanged();
}
}
}
そして、ここでの主なクラスです:
Model m;
public MainWindow()
{
InitializeComponent();
m = Model.GetInstance();
this.DataContext = m;
}
private void startButton_Click(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem(o =>
{
TimerManager.StartTimer();
});
//TimerManager.StartTimer();
}
private void stopButton_Click(object sender, RoutedEventArgs e)
{
TimerManager.StopTimer();
}
..だから 私は私の秘密のプログラムに非常に重要ですので、私はThreadPool.QueueUserWorkItem ...メソッドを使用してスタートボタンをクリックしたとき。 その方法では、タイマーを開始し、タイマーティックは1秒ごとに実行されません。 しかし、私はThreadPool .....などを使用しないでこれは働いている!しかし、私がhttpウェブサーバー(ローカル)を使用しているので、ThreadPoolが私のために重要であるので、この解決策は私にとってはうまくいかない。
私の質問は次のとおりです。私がThreadPoolを使用しているのはどうしてですか?それを解決するには?
さようなら、そしてすべての:)
ためのTHX(申し訳ありませんが、私の悪い英語:()
ほとんどの 'TimerManager.StartTimer();'操作でThreadPoolを使う理由は何ですか? – ASh
これは簡単な例です。しかし、私のアプリでは(https://codehosting.net/blog/BlogEngine/post/Simple-C-Web-Server)このページ(https://codehosting.net/post/Simple-C-Web-Server)からhttplistenerを使用しているため、インスタントを使用しないでください。方法。 応答を返す前にTimerManager.StartTimer()を使用します。 –
必要なXAMLを含め、優れた[mcve]を提供した方が良いでしょう。しかし、ここにあなたが持っている問題が何であるかを知るのに十分な情報があります。下の私の答えを見てください。 –