0
 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Thread HeartRateThread = new Thread(startThread);
        HeartRateThread.Name = "Class1";
        HeartRateThread.Start();
    }

    private void startThread(object obj)
    {
        new Class1();
    }
}

 public class Class1
{
    public  Class1()
    {
        DispatcherTimer timer1 = new DispatcherTimer();
        timer1.Interval = new TimeSpan(0,0,0,1);
        timer1.Tick += timer1_tick;
        timer1.Start();
    }

    private void timer1_tick(object sender, EventArgs e)
    {
        Debug.WriteLine("timer called");
    }
}

maInWindow のコード セクションで明らかなように、別のスレッドからこの timer_tick 関数を有効にしようとしています。ただし、Class1 コンストラクターが呼び出されますが、timertick 関数は有効になっていません。ただし、メインスレッドでこれを行うと、すべて正常に動作します。これには何らかの理由があります。どうすれば動作させることができますか?

4

4 に答える 4

0

Dispatcherテストせずに、構築時に MainWindow を DispatcherTimer に渡す必要があると思います。それ以外の場合は、独自のものを作成します。

private void startThread(object obj)
{
    new Class1(Dispatcher);
}

...

public Class1(Dispatcher dispatcher)
{
    DispatcherTimer timer1 =
        new DispatcherTimer(DispatcherPriority.Background, dispatcher);

    timer1.Interval = new TimeSpan(0,0,0,1);
    timer1.Tick += timer1_tick;
    timer1.Start();
}
于 2013-10-28T09:28:33.737 に答える
0

startThread メソッドの呼び出しに Dispatcher を使用できます。

 object objParameter = "parametervalue";
        Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(
                                                                                () => startThread(objParameter))); 
于 2013-10-28T10:24:44.177 に答える