合計 昨日 今日

C#の疑問がいっぱい

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

Name: metaphor
[URL]
Date: 2016年12月31日(土) 00:05
No: 31
(OFFLINE)

 Re: C#の疑問がいっぱい

Bitmap img;からAlpha,R,G,Bに変換したいならどのクラスが必要かわかるでしょう。(Alpha,R,G,Bを間違えるのはVisualStudioを使えるならありえいから説明しょうと思うのですが)

Name: metaphor
[URL]
Date: 2016年12月31日(土) 00:15
No: 32
(OFFLINE)

 Re: C#の疑問がいっぱい

usingさえ送ってもらえば極簡な事だけどそうでないと説明しにくいだけ。コンソールではあまり使わないクラスだから。

Name: ちゃん太
[URL]
Date: 2017年1月02日(月) 16:41
No: 33
(OFFLINE)

 Re: C#の疑問がいっぱい

Timer t = new Timer(); たったこの一行で

エラー 1 'System.Threading.Timer' に、引数を 0 個指定できるコンストラクターがありません。

が出てきました。何故でしょう?

Name: ちゃん太
[URL]
Date: 2017年1月02日(月) 16:57
No: 34
(OFFLINE)

 Re: C#の疑問がいっぱい

TimerクラスってC#2つありますよね?
どっち使ったらいいですか?
トピックと直接は関係ないんですが、すいません。
1秒ごとに色が変わるプログラムを作ろうと思って…

Name: hide
[URL]
Date: 2017年1月02日(月) 17:18
No: 35
(OFFLINE)

 Re: C#の疑問がいっぱい

Offtopic :
ログが強烈に見辛いです。。

Name: Math
[URL]
Date: 2017年1月02日(月) 17:36
No: 36
(OFFLINE)

 Re: C#の疑問がいっぱい

まずここhttp://www.atmarkit.co.jp/fdotnet/dotnettips/373threadtimer/threadtimer.htmlを読んで分からない事があったら聞いてくださいね。

Name: Math
[URL]
Date: 2017年1月02日(月) 19:04
No: 37
(OFFLINE)

 Re: C#の疑問がいっぱい

http://csi.nisinippon.com/pngサンプル
System.Windows.Forms    System.Drawing  の参照設定のこと
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;using System.Windows.Forms;
using System.Drawing;
namespace ConsoleApplication1
{
    class Program{
        [STAThread]
        static void Main(string[] args){
            Form f; f = new Form(); f.Show(); f.BackColor = Color.Red;
            while (f.Created)//Application::Runしないでループ
            {
                f.BackColor = Color.Red;//赤色
                System.Windows.Forms.Application.DoEvents();
                System.Threading.Thread.Sleep(500);//一秒間(1000ミリ秒)停止する                
                f.BackColor = Color.Cyan;//シアン色
                System.Windows.Forms.Application.DoEvents();
                System.Threading.Thread.Sleep(500);//一秒間(1000ミリ秒)停止する
                System.Windows.Forms.Application.DoEvents();
            }}}}

Name: Math
[URL]
Date: 2017年1月02日(月) 19:15
No: 38
(OFFLINE)

 Re: C#の疑問がいっぱい

http://csi.nisinippon.com/smp.png
訂正版: VisualStudio2008で動作確認済み
PowerShellで作った。VisualStudio しか知らないプログラマーには出来ないかも知れません。

Name: Math
[URL]
Date: 2017年1月02日(月) 19:20
No: 39
(OFFLINE)

 Re: C#の疑問がいっぱい

System.Threading.Thread.Sleep(1000);//一秒間(1000ミリ秒)停止する
...作ってみれば簡単ですよ。

Name: YuO
[URL]
ハッカー(150,489 ポイント)
Date: 2017年1月02日(月) 22:52
No: 40
(OFFLINE)

 Re: C#の疑問がいっぱい

ちゃん太 さんが書きました:Timer t = new Timer(); たったこの一行で
エラー 1 'System.Threading.Timer' に、引数を 0 個指定できるコンストラクターがありません。
が出てきました。何故でしょう?

書いてあるとおり,System.Threading.Timerクラスのコンストラクタには,引数が0個のものがないからです。
少なくとも,時間が経った時に呼ばれるコールバックデリゲートが引数として必要です。

ちゃん太 さんが書きました:TimerクラスってC#2つありますよね?
どっち使ったらいいですか?

Timerクラスは2つではないです……。

とりあえずですが,基本的にはを使います。

UIと関係なくタイマーを使いたい場合は,System.Threading.Timerを使います。
Offtopic :
実際問題として、System.Timers.Timerを使うかSystem.Threading.Timerを使うかは意見がわかれるところだと思います。
検索すると,両方とも推奨するページがみつかります。

ただし,どちらもUIに貼って簡単に使うようなものではないので,Forms.TimerやDispatcherTimerに慣れた方がよいでしょう。


ちゃん太 さんが書きました:トピックと直接は関係ないんですが、すいません。
1秒ごとに色が変わるプログラムを作ろうと思って…

WinFormsならば,まずはSystem.Windows.Forms.TimerをFormに貼り,Tickイベントのハンドラに色を変更するようなコードを書きます。
さらに,貼ったTimerのIntervalプロパティを1000に(Intervalは単位がミリ秒のため),Enabledプロパティをtrueに設定します。



とりあえず,Application.DoEventsなんてものを使っている時点で論外です。
UIスレッドでThread.Sleepというのは,やってはいけない基本中の基本ですし。
間違っても,Mathさんのコードを参考にしないようにお願いします。

一定時間ごとに物事を行いたい場合,Timerを使うか,マルチスレッドを使って処理します。
おそらく,動作させた場合,ウィンドウを移動させようとしても最大500ms反応しませんし,逆に動かしている最中は色が変化しないはずです。

Math さんが書きました:PowerShellで作った。VisualStudio しか知らないプログラマーには出来ないかも知れません。

「Visaul Studioしか知らないプログラマーでは出来ない」のではなく,知識がある人は地雷だらけのそのようなコードを書かないだけです。
  • UIスレッドで長時間処理をすると,ウィンドウメッセージの処理が滞りUIの反応が悪くなるため,長時間処理は行わない。別スレッドに任せるのが普通。
    Thread.SleepやTask.Delayは長時間処理の典型例であり,当然使わない。
  • Application.DoEventsを使うと,想定外のタイミングで処理が行われるため動作の管理がややこしくなる上,そもそもUIスレッドで処理をしないことで対処ができるので,使わないのが普通。

Name: Math
[URL]
Date: 2017年1月03日(火) 00:04
No: 41
(OFFLINE)

 Re: C#の疑問がいっぱい

そうですよね。今時DoEventsは使わないと思います。過去に見た引用先サイトの例を写して急いで作ったもので質問された方への説明ようです。あとデルタ式でボタンの説明まで作ってあったのですが。その方も例を見れば勘違いしていることに気付かれると思ったのですがやはりどうか...。PwerShellの件は初心者の方のことで”VisualStudioがあまりに便利(どちらかというとそこまでしなくても...と思うので)なのでPowerShellでコマンドでコンパイルする方が勉強になるののではないでしょうかという意味です。それにPowerShellはUnixのShell互換なのでその意味でもおすすめです。

Name: ちゃん太
[URL]
Date: 2017年1月04日(水) 20:40
No: 42
(OFFLINE)

 Re: C#の疑問がいっぱい

[解決!]

解決しました。
無事、コマンドプロンプトが閉じないで実行されたままになりました。

1つ前へ

Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[10人]