C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C# Timers.Timer について


(過去ログ 133 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■78831 / inTopicNo.1)  C# Timers.Timer について
  
□投稿者/ 初心者 (29回)-(2016/02/20(Sat) 11:53:55)

分類:[C#] 

初歩的な質問、失礼致します。

System.Windows.Forms.Timer を卒業し、(複雑な計算をタイマーと連動させると重いので、、、)

Timers.Timer を用いた タイマー機能を試してみたいと思っています。

下記のようなサンプルコードを参考にしました。


using System.Timers;
public class MyClass
{
private System.Timers.Timer myTimer;

public void NewTimer()
{
myTimer = new System.Timers.Timer();
myTimer.Enabled = true;
myTimer.AutoReset = true;
myTimer.Interval = 500;
myTimer.Elapsed += new ElapsedEventHandler(OnTimerEvent);
}

private void OnTimerEvent(object source, ElapsedEventArgs e)
{
// ここにタイマー起動中の動作を書く?
time ++; //みたいな?
}

public void StartTimer()
{
myTimer.Start();
}

public void StopTimer()
{
myTimer.Stop();
}
}

このフォーム上で、ボタンを押したときに、このTimerを起動する場合はどうしたらいいのでしょうか?

private void button1_Click(object sender, EventArgs e)
{
myTimer.Start(); // こんな単純ではないですよね?
}
引用返信 編集キー/
■78832 / inTopicNo.2)  Re[1]: C# Timers.Timer について
□投稿者/ Hongliang (409回)-(2016/02/20(Sat) 12:03:05)
どんな複雑な物を想像されているか知りませんが、そんな単純です。
もしOnTimerEventメソッドの中でコントロール類に触るのであれば、そっちは多少複雑になります。
引用返信 編集キー/
■78844 / inTopicNo.3)  Re[1]: C# Timers.Timer について
□投稿者/ WebSurfer (830回)-(2016/02/21(Sun) 01:21:51)
No78831 (初心者 さん) に返信

あなたは No78652 の初心者さんですか?
引用返信 編集キー/
■78870 / inTopicNo.4)  Re[2]: C# Timers.Timer について
□投稿者/ 初心者 (30回)-(2016/02/22(Mon) 18:54:00)
No78844 (WebSurfer さん) に返信
> ■No78831 (初心者 さん) に返信
>
> あなたは No78652 の初心者さんですか?


ご回答有難う御座います。

違う人物です。

フォームにボタンとラベルを設置して、下記のようなプログラムをつくりましたが、

ボタンを押すとエラーが出てしまいます。


型 'System.NullReferenceException' のハンドルされていない例外が WindowsFormsApplication1.exe で発生しました

追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません


対策、どなたか教えて頂けませんでしょうか?


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;

namespace WindowsFormsApplication12
{
public partial class Form1 : Form
{
public int time;

private System.Timers.Timer myTimer;
public void NewTimer()
{
myTimer = new System.Timers.Timer();
myTimer.Enabled = true;
myTimer.AutoReset = true;
myTimer.Interval = 500;
myTimer.Elapsed += new ElapsedEventHandler(OnTimerEvent);
}

private void OnTimerEvent(object source, ElapsedEventArgs e)
{
time++;
}

public void StartTimer()
{
myTimer.Start();
}

public void StopTImer()
{
myTimer.Stop();
}



public Form1()
{
InitializeComponent();

time = 1;

}

private void button1_Click(object sender, EventArgs e)
{
myTimer.Start();


}

private void Form1_Load(object sender, EventArgs e)
{
label1.Text = "" + time + "";
}
}
}


引用返信 編集キー/
■78871 / inTopicNo.5)  Re[3]: C# Timers.Timer について
□投稿者/ 魔界の仮面弁士 (652回)-(2016/02/22(Mon) 19:05:54)
2016/02/23(Tue) 00:18:28 編集(投稿者)

No78870 (初心者 さん) に返信
> 追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません

フィールド変数 myTimer が null だからです。


public void NewTimer() のメソッド内で
Timer のインスタンスを生成しているようですが、
この NewTimer メソッドはどこからも呼ばれていないため
myTimer 変数は null のままとなっています。

その状態(null なオブジェクト)で、その Start、Stop メソッドを
操作しようとしたため、NullReferenceException になったのでしょう。



> 対策、どなたか教えて頂けませんでしょうか?
myTimer を使う前に NewTimer を呼び出しておきましょう。
引用返信 編集キー/
■78893 / inTopicNo.6)  Re[3]: C# Timers.Timer について
□投稿者/ WebSurfer (843回)-(2016/02/23(Tue) 12:47:22)
No78870 (初心者 さん) に返信

> 違う人物です。

そうですか、それは失礼しました。

でも、次回からは「初心者」ではなく、利用方法/規約(抜粋下記)に従って、ユニーク
なハンドル名を決めてそれをずっと使っていただくようお願いします。「初心者」では
誰だか分からなくなってしまいます。

"一貫して同じハンドルを使用し、場を混乱させないようにしましょう。同じハンドルの
方が質問の背景がわかりやすいです (自作自演をしたり別人を装うのは回答者の善意を裏
切る行為です)。"

> 追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません

魔界の仮面弁士さんが指摘されているように button1_Click メソッドの中の myTimer
が null になっているからだと思います。

その行にブレークポイントを設定してデバッガで見て確認してください。もし、デバッガ
の使い方が分からないなら、ググるといろいろ参考になる記事が見つかるので、とりあえ
ずブレークポイントの設定の仕方、デバッグ実行のやり方、変数の中身の見方だけでもマ
スターしましょう。それができるのとできないのとでは今後の開発に大きな違いが出てき
ます。

で、null となっているのが確認できたら、なぜ null のままなのかを考えると解決方法
が見つかると思います。

(アップされたコードを見る限りでは、魔界の仮面弁士さんが指摘されているように、
NewTimer メソッドで new しているようですが、NewTimer メソッドが実行されてない
から null のままになっているように見えます)
引用返信 編集キー/
■78899 / inTopicNo.7)  Re[4]: C# Timers.Timer について
□投稿者/ なちゃ (104回)-(2016/02/23(Tue) 13:00:39)

> "一貫して同じハンドルを使用し、場を混乱させないようにしましょう。同じハンドルの
> 方が質問の背景がわかりやすいです (自作自演をしたり別人を装うのは回答者の善意を裏
> 切る行為です)。"

明らかにノイズですがこれだけは言っておきます。
一貫したハンドル使ってようが気に入らない?書き込みは妄想でなりすまし扱いして放置、謝罪もしないと言うことを繰り返しているあなたにえらそうなことをいう資格はない。

というか自分の態度を見直してください。
そしてあなたが妄想で言いがかりをつけた人たちにさっさと謝罪してください。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -