C#, C♯, C#相談室 P ..
[2ch|▼Menu]
697:デフォルトの名無しさん
09/08/07 14:49:45
Process.Start()で存在しないフォルダを起動したら、FileNotFoundExceptionじゃなくてSystem.ComponentModel.Win32Exceptionというのが来る
Frameworkが吸収するところじゃないのか

698:デフォルトの名無しさん
09/08/07 15:34:45
あなたはそれがいいと思うかもしれないが、
大多数の他人はそう思わない

699:デフォルトの名無しさん
09/08/07 16:48:15
いやそうでもない

700:デフォルトの名無しさん
09/08/07 16:59:52
Frameworkが吸収すべき所のような気がするけど
実害は無いからとやかく言わない

701:デフォルトの名無しさん
09/08/07 17:06:23
>>697
つうかふつうに固まるだろ・・・・
問題はみに行く時に固まるつうのが問題なわけで

なにかボタン押したときにチェック

チェック中ですのダイアログ的なものと共に強制キャンセルボタン

チェック開始(バックグラウンドワーカーでもなんでも)

バックグラウンド終了前にキャンセルされたら
ナックグラウンドワーカー停止

こんなんでいいんじゃね?

成功のときはバックグラウンドの完了イベントかなんかで処理するとか

色々あると思うけど

702:デフォルトの名無しさん
09/08/07 17:25:47
Microsoftの決めたことなんだから正しいお

703:デフォルトの名無しさん
09/08/07 18:37:58
>>697
吸収してどうしろって?
別プロセスからの例外をプロセス間通信で受け取るの?
それをフレームワークでやれって?

704:デフォルトの名無しさん
09/08/07 19:01:23
なん…だと…

705:デフォルトの名無しさん
09/08/07 20:19:40
Windowsフォームで質問。

Form2 _form2 = new Form2(_form1);

としたとき、_form2.FormClosedのイベントハンドラで_form1.Close()するコードを書くと、
Form2.OnFormClosed()が何度も呼ばれる(つまりFormClosedイベントが何度も発生する)
ようなんだけど、これは仕様?バグ?

仕様だとしたらどう理解したらいいんだろう?

706:デフォルトの名無しさん
09/08/07 20:25:45
OwnerはCloseするときOwnedFormsを全部Closeする
って言えば分かる?

707:デフォルトの名無しさん
09/08/07 20:34:10
>>706
そのレベルの話はOK

708:デフォルトの名無しさん
09/08/07 20:53:58
普通に再帰呼び出しになってるだけっしょ
止まるのはハンドルが消えるから

709:デフォルトの名無しさん
09/08/07 20:59:15
>>708
現象の説明としてはそれでいいと思うんだけど、
俺が聞きたいのはそういうことじゃなくて、それが仕様なのか、
仕様だとしてそれに何らかの意味があるのかってこと。

FormClosedイベントの意味は、「Close()が呼ばれました」ではないはずだよね。

710:デフォルトの名無しさん
09/08/07 21:06:03
> FormClosed イベントは、ユーザー、Close メソッド、または Application クラスの Exit メソッドによって
> フォームが閉じられた後に発生します。
「Form.Closeが呼ばれました」でも大体いいんじゃないかな

ま、おいらはMSの人じゃないので意味とか答えられないけど

711:デフォルトの名無しさん
09/08/07 21:09:46
>>710
それはさすがに読解力マズいんじゃないかと思うけど。。

712:デフォルトの名無しさん
09/08/07 21:50:30
何度も呼ばれるって何度?

713:デフォルトの名無しさん
09/08/07 21:52:55
バグだよ、>>705のプログラムのね

714:デフォルトの名無しさん
09/08/07 21:55:57
Closed≠Disposedと理解すれば良い

715:デフォルトの名無しさん
09/08/07 22:07:36
>>710-711
MSDNの説明から読み取れるのは

・ユーザ操作、Close()、Application.Exit()で発生しうる
・FormClosedが発生した時点ではフォームは閉じられている

の2点だけじゃね?

てか、説明が怪しいと感じたら英語版を読むといい
それでも怪しいときも多いけどな

716:デフォルトの名無しさん
09/08/07 22:20:48
ちなみに何回くらい呼ばれるの?
また毎回同じ回数なのか場合によって変わるのかどんな感じ?


717:デフォルトの名無しさん
09/08/07 22:33:34
>>716
以下が問題を再現する最短のコード。
コンストラクタは省略してある。

public partial class Form1 : Form
{
  Form2 _form2;

  protected override void OnLoad(EventArgs e)
  {
    base.OnLoad(e);
    _form2 = new Form2();
    _form2.FormClosed += new FormClosedEventHandler(_form2_FormClosed);
    _form2.Show(this);
  }

  void _form2_FormClosed(object sender, FormClosedEventArgs e)
  {
    Close();
  }
}

public partial class Form2 : Form
{
  int _count = 0;
  protected override void OnFormClosed(FormClosedEventArgs e)
  {
    base.OnFormClosed(e);
    Console.WriteLine("Form2.OnFormClosed Called ! // count = {0}", _count++);
  }
}

718:デフォルトの名無しさん
09/08/07 22:53:53
>>717
とりあえずDisposedイベントでForm1.Closeやるように変更したら
現象回避出来たぞ

719:デフォルトの名無しさん
09/08/07 23:00:06
>>718
うん、それはわかるけど、
俺が知りたいのはこういうコードを書くと「何故」そんなことになってしまうか、なんだ。

普通に考えれば、OnFormClosedが何度も呼ばれるのは理解に苦しむと思うんだが。

720:デフォルトの名無しさん
09/08/07 23:00:45
Form2ClosedでForm1Closeして新しいClosedが発生するのがおかしいと言ってるの?
何がおかしいのかよくわからない

721:デフォルトの名無しさん
09/08/07 23:02:44
>>719

まあ所持関係にあるForm同士として呼び出してるんだから
>    _form2.Show(this);

Form1閉じる→Form2閉じる
っていうのは標準動作として組み込まれてる

逆方向の動きを追加したい場合(Form2閉じる→Form1閉じる)は
標準の動作と競合しないようにしなきゃ不具合が起きて当たり前

FormClosed()の時点ではForm同士の所持関係を破棄していないようなので
無限ループが起きる
Disposed()の時点でForm同士の所持関係を破棄しきったので
やりたい動作が実現できる

722:デフォルトの名無しさん
09/08/07 23:07:42
FormClosedイベントなんだから、「完全にフォームが閉じた後」に発生しないとおかしい
と言いたい訳か。
んで_form2が完全に閉じた後だから、_form2_FormClosedが呼ばれても子フォームのCloseが呼ばれるのはおかしい、と

723:デフォルトの名無しさん
09/08/07 23:15:06
Close()をこうやって呼べばいけるっちゃいける。
this.BeginInvoke((MethodInvoker) (() => Close()));

親フォームが子フォームを閉じるための参照のコレクションを持ってて、
親フォームから登録を抹消するタイミングがFormClosedの後なんだろうな。

724:デフォルトの名無しさん
09/08/07 23:16:44
>>722
>_form2が完全に閉じた後だから、_form2_FormClosedが呼ばれても子フォームのCloseが呼ばれるのはおかしい、と
いや、そこは必ずしもそうは思わないけど、>>717のコードの動作が「おかしい」と思う点は、
何度も言うけどOnFormClosedの呼ばれ方が、MSDNに書かれたFormClosedイベントの仕様に
反するように思える点。

725:デフォルトの名無しさん
09/08/07 23:17:10
>>723
なんかそれタイミング次第で
うまく行ったり例外おきたり
危険な動作しそうな気がする

726:デフォルトの名無しさん
09/08/07 23:18:43
例えば、Form.Show()は何度でも呼べるけど、
その都度Shownイベントが発生したりはしないよね。

727:デフォルトの名無しさん
09/08/07 23:19:47
>>724
Formのオーナーシップの関係で
Formクラスから子FormのCloseが呼び出されるってことでしょ
何も反してないよ

728:デフォルトの名無しさん
09/08/07 23:23:40
>>727
だから、FormClosedイベントの意味、つまり仕様は、「Closeメソッドが呼ばれました」
ではないよね。少なくともMSDNライブラリを詠む限り、そうは読み取れない。

729:デフォルトの名無しさん
09/08/08 00:26:58
お前が明示的に呼んだときしかCloseメソッドが呼ばれないと思ってるということか

730:デフォルトの名無しさん
09/08/08 00:37:46
>>729
こんなこと言いたくないが、馬鹿はすっこんでてくれよ。
二重の意味で日本語も読めないのかまったく……

731:デフォルトの名無しさん
09/08/08 00:40:59
>>730
どう見てもお前の方が馬鹿だが

732:デフォルトの名無しさん
09/08/08 00:41:33
むしろMSDライブラリを読み取れないレベルの馬鹿がやめた方がいい
お話になりません

733:デフォルトの名無しさん
09/08/08 00:59:09
横やりだが>>728とかの言ってることは別にそんなおかしくないぞ。
Closeを何度呼ぼうが、実際に閉じたタイミングで一度だけ発生する
と期待するのは普通の感覚。
MSDNの説明も普通に読めばそうだと期待する。

一度しか呼ばれない、とは明記されてないし結局仕様なんだろうとは思うけど。


734:デフォルトの名無しさん
09/08/08 01:05:38
1度テストしてみて理解できないようなら方法は無い

735:デフォルトの名無しさん
09/08/08 01:14:25
MSDNのクラスのドキュメントって
クラス単体の動作を説明してるのが基本であって
フレームワークの中でそのクラスがどう扱われてるかは
オマケ程度にしか説明されていない

っていうことをわかって無いから的外れなこと言い出すんだよね

736:デフォルトの名無しさん
09/08/08 01:28:44
>>735
ほほう、「的外れ」とは?
具体的に何がどう「的外れ」だ、と?

いや、無理しなくていいよ。
そんな自分の頭で理解していることを表現しているとは思えない、
悪いけど意味不明な文章を書いているようじゃたぶん正面からの回答は無理だと思うから。

しかし、別に初心者が悪いと思わんけど(誰だって最初はそうだし)
知りもしないことに口出しして挙句に相手をいきなり罵倒する奴っていうのは
迷惑以外の何者でもないな本当。

初心者どころか自分でイベントを生成するコードすら書いたことすらないのが、
言っちゃ悪いがミエミエなのに。
まあそれ以前に日本語もまともに読めていないようだけどw

2chでこんなこと言ってみても仕方ないのは分かっているが、あまりに腹が立ったのでね。

737:デフォルトの名無しさん
09/08/08 03:20:05
ここでクダ巻いててもしょーもねーだろw

738:デフォルトの名無しさん
09/08/08 04:57:36
長文書いたら負けですよ

739:デフォルトの名無しさん
09/08/08 06:37:29
閉じられる理由位見ろ
_form2_FormClosed() の処理が
if (e.CloseReason == CloseReason.UserClosing)
  Close();
じゃないの点が問題なんだよ

何度も Form2 に FormClosed が送られてくるのも
あくまでも Form2.FormClosed イベントが終了していない段階で
Form1 を改めて閉じようとしているからループしてるに決まってるだろ

ユーザ操作以外ではどうせ親から Close が送られてくるから無視でいい

740:デフォルトの名無しさん
09/08/08 16:24:06
Form 1 の中で生成した Form2 を破棄しようとして起きるんじゃないの

741:デフォルトの名無しさん
09/08/08 18:41:56
テキストボックスやパネルの境界線の色をグレーや薄いブルーなどにするにはどうすればいいですか?
また、
ラベルの上に小さめのテキストボックスを重ね、一つのコントロールにすることはできますか?

調べましたが分かりませんでした。
どなたか教えてください
(T_T;)。




742:デフォルトの名無しさん
09/08/08 19:08:28
WPFをつかっとけ

743:デフォルトの名無しさん
09/08/08 19:45:28
>>742
WindowsフォームアプリケーションでWPFのコントロールを使えるんだっけ…。

744:デフォルトの名無しさん
09/08/08 19:50:05
>>740
ユーザ要求により Form2 に WM_CLOSE が送られ
その処理中に Form2 から Form1 に WM_CLOSE が送られ
Form1 が閉じる際に子ウィンドウに対して WM_CLOSE が送られ
その処理中に Form2 から Form1 に WM_CLOSE が送られ……

WM_CLOSE から発生する一連の処理が終了してない間に
改めて WM_CLOSE を流したらループするだろ

745:デフォルトの名無しさん
09/08/08 19:51:38
>>743
Windows Forms の編集時にツールボックス見たら
WPF 相互運用機能グループに ElementHost あるでしょ

746:デフォルトの名無しさん
09/08/08 19:56:57
>>717の場合は、別にWin32のウィンドウメッセージの水準で連鎖が起こってるわけじゃなく、
あくまで.NET Frameworkの、いわゆる「イベントの連鎖」が起こってるだけ
(しかも仕様というよりバグが原因ぽい)だから、ちょっとその説明は違うと思うけど。

747:デフォルトの名無しさん
09/08/08 19:57:05
なんでElementHost なんてわけわからん名前にしたんだ?

748:デフォルトの名無しさん
09/08/08 20:09:08
至って普通の名前だと思うが・・・

749:デフォルトの名無しさん
09/08/08 20:11:01
わけわからんって。
Element(UIElement) を Host するから ElementHost。


750:デフォルトの名無しさん
09/08/08 20:14:18
WinFormだけでやるなら、
TextBoxやらはボーダーなしにして、
その親としてPanelを用意して、
そのPanelのPaintで枠を描画

751:デフォルトの名無しさん
09/08/08 20:15:37
このスレはMS信者に乗っ取られているようだ
嘆かわしい

752:デフォルトの名無しさん
09/08/08 20:31:56
まぁC#使ってる奴の99.9%がMS使いだと思うよ(´・ω・`)
だれかC#でiPhone開発してる人来ないかな・・・

753:デフォルトの名無しさん
09/08/08 20:34:52
というかどこから >>751 が出てきたんだ?

754:デフォルトの名無しさん
09/08/08 20:44:26
何かのキーワードに反応するボットじゃない?

755:デフォルトの名無しさん
09/08/08 21:12:16
>>750
PanelにPaintができるの?
枠線入りの画像をパネルの背景にするってこと?

756:デフォルトの名無しさん
09/08/08 21:17:07
普通にPaintできるだろ
もしWPFを使うなら,テキストボックス一つ一つをElementHostでホストするようなことはお勧めしない
ある程度の大きい範囲で丸ごとWPFにしてElementHostに乗せる

757:デフォルトの名無しさん
09/08/08 21:28:28
>>755
具体的にどうやるの?
panel1_iventが出てきたけど…。

758:デフォルトの名無しさん
09/08/08 21:45:35
paintイベントって、formをloadしたときに自動で発生するの?

759:デフォルトの名無しさん
09/08/08 21:51:23
描画が必要なとき
もちろん初めにフォームを表示するときも呼ばれるな

760:デフォルトの名無しさん
09/08/08 21:51:35
くれくれしすぎは

761:デフォルトの名無しさん
09/08/08 22:14:24
もしパネルやテキストボックスがたくさんある場合、
それらの全ての四辺を描画するならば、
重たくなりそう。


762:デフォルトの名無しさん
09/08/08 22:16:19
>>756
ラベルやテキストボックスにbordercolorがないのが困る。

763:デフォルトの名無しさん
09/08/08 22:17:19
>>756
エレメントホストはどれくらい重たいのかな。
今からやってみよ。

764:デフォルトの名無しさん
09/08/08 23:01:35
>>741
なんかまともにレスする奴がいないんで見てられないからレスするけど、
そんなのは普通にTextBoxを継承してカスタムコントロール作ってやればいいんだよ。
class TextBoxEx:TextBox
{
  public TextBoxEx()
  {
    BorderColor = Color.Red;
    BorderStyle = BorderStyle.FixedSingle;
  }

  [Category("Design"), DefaultValue(typeof(Color), "Red")]
  public Color BorderColor { get; set; }

  [Browsable(false),
  DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  public new BorderStyle BorderStyle
  {
    get { return base.BorderStyle; }
    set { base.BorderStyle = value; }
  }

765:デフォルトの名無しさん
09/08/08 23:02:47
* 764続き *

  protected override void WndProc(ref Message m)
  {
    base.WndProc(ref m);
    const int WM_PAINT = 0xF;
    switch (m.Msg)
    {
      case WM_PAINT:
        using (Graphics g = CreateGraphics())
        {
          using (Pen pen = new Pen(BorderColor))
          {
            Rectangle rect = ClientRectangle;
            rect.Width -= 1; rect.Height -= 1;
            g.DrawRectangle(pen, rect);
          }
        }
        break;
    }
  }
}

766:デフォルトの名無しさん
09/08/08 23:09:41
>>765
細かいことだけど、WndProcよりもOnPaintのオーバーライドのほうが簡潔では?
もちろんsuper.OnPaint呼ぶ手間含んで。

767:デフォルトの名無しさん
09/08/08 23:09:50
>>765
すごい。ありがとうございます。がんばって解読します。
この継承クラスをまた継承したら、命令を抑えてコーディングできますね。

※ なんで継承したら、bodercolorが出てくるんだろう---。


768:デフォルトの名無しさん
09/08/08 23:10:55
>>766
やってみればわかるよ。

769:デフォルトの名無しさん
09/08/08 23:12:08
例えば50個のテキストボックスを表示させ、
それら全てに色枠線を描いたら、重たいのかな。

770:デフォルトの名無しさん
09/08/08 23:30:00
>>768
ごめんなさい。言うとおりだった。

ググったらこんな記述も見つけた。PaintイベントがないならOnPaintもなくて当然か。
URLリンク(msdn.microsoft.com)
> TextBoxBase.Paint イベント
> コントロールが再描画されると発生します。このクラスでは、このイベントは使用されません。

771:デフォルトの名無しさん
09/08/08 23:35:45
panelならOnpaintも可能なんだろか。

772:デフォルトの名無しさん
09/08/09 07:46:49
>>765
さんの記事に、
「using (Pen pen = new Pen(BorderColor)) 」
という行がありますが、using句は名前空間の定義のみに使用するわけではないのですか?
どういうケースでusing句を指定するケースがあるのでしょうか。

773:デフォルトの名無しさん
09/08/09 07:47:50
URLリンク(msdn.microsoft.com)
MSDNくらい読めよクソタコ

774:デフォルトの名無しさん
09/08/09 07:54:42
>>765
using (Graphics g = CreateGraphics())
{
 using (Pen pen = new Pen(BorderColor))
 {
 }
}

だとネストが深くなるから

using (Graphics g = CreateGraphics())
using (Pen pen = new Pen(BorderColor))
{
}

の方がいいな。

775:デフォルトの名無しさん
09/08/09 07:56:28
}それならこれでいいだろ
using (Graphics g = CreateGraphics(), Pen pen = new Pen(BorderColor))


776:デフォルトの名無しさん
09/08/09 09:16:17
>>775
そうやって並べると見辛くないか? >>774でいいじゃん

777:デフォルトの名無しさん
09/08/09 10:00:28
わざわざ1行にする意味ないな

778:デフォルトの名無しさん
09/08/09 10:26:24
「黄金分割」<副題> ピラミッドから ル・コルビュジェまで 柳亮著 美術出版社
1965年の出版でしかも純粋な美術書。でも、なぜフィボナッチ数の課題を
出されるのかピンとこないプログラマは一度目を通してみるとよい。

779:デフォルトの名無しさん
09/08/09 11:14:40
黄金分割なんてうさんくさいと思うのは俺だけか?

780:デフォルトの名無しさん
09/08/09 12:15:28
みんなが黄金といっているのだから黄金なんだろう

781:デフォルトの名無しさん
09/08/09 12:23:24
僕には黄金はまだきついので聖水でいいです

782:デフォルトの名無しさん
09/08/09 13:30:33
名前が胡散臭いだけで特別なものでも不可思議なものでもないけどね。

783:778
09/08/09 17:47:10
>>779すみません。これ誤爆でした。

784:デフォルトの名無しさん
09/08/09 18:35:56
>>775
コンパイル


785:デフォルトの名無しさん
09/08/09 19:08:36
>>765
こうやると枠線だけ書いて、中の文字塗り潰してしまうイメージあったけど
これでいけるんだ

勉強になりました

786:デフォルトの名無しさん
09/08/09 19:13:38
このやり方で重たくならないならば、俺もやりたい。
みんな、なんでそんなに詳しいの?
頭脳を分けてほしいよ。

787:デフォルトの名無しさん
09/08/09 19:14:55
もっと簡単にできたとおもうが。

788:デフォルトの名無しさん
09/08/09 20:23:35
listviewのcustomdrowめんどくさー

789:デフォルトの名無しさん
09/08/09 20:27:50
ユーlistviewつくっちゃいなYO!

790:デフォルトの名無しさん
09/08/09 20:33:28
customdrow?


791:デフォルトの名無しさん
09/08/09 20:37:31
カスタムドローで合ってるぞ
オーナードローじゃないぜ

792:デフォルトの名無しさん
09/08/09 20:44:39
dr o w?

793:デフォルトの名無しさん
09/08/09 21:05:54
>>784
このロジックはどこに書くの?
デザイナーズcs?
それとも本体の方?

794:デフォルトの名無しさん
09/08/09 21:39:42
いろいろ作ったらさ
SS見せてほしいんだけどw

795:デフォルトの名無しさん
09/08/09 22:21:54
>>794
SSってなに?

796:デフォルトの名無しさん
09/08/09 22:24:17
Secret Service

797:デフォルトの名無しさん
09/08/09 22:26:35
SQLサーバーを借りてるんですが、直にSQLを書くのと、linqを使うのと、どちらがメリットが高いですか?

798:デフォルトの名無しさん
09/08/09 22:28:15
ボーリングのスコア表をC♯で作りたいんだけど、
膨大な数のテキストボックスを早く負担なく描くには何かいいテクニックはありますか?

799:デフォルトの名無しさん
09/08/09 22:29:39
>>798
なんでボーリングスコア表なんていんねん。

800:デフォルトの名無しさん
09/08/09 22:31:47
>>798
マウスを使って一つずつペタペタ描く。
それしかないだろ。
本を見てもそう書いてた。
間違っていたらごめん。

801:デフォルトの名無しさん
09/08/09 22:40:38
手っ取り早いのはGirdじゃね

802:デフォルトの名無しさん
09/08/09 22:45:24
>>801
ジードって読むの?
初めて聞きました。
詳しく教えてください。
僕もマウスて配置していてくたびれました。

803:デフォルトの名無しさん
09/08/09 22:47:17
1文字間違えるのが流行りなのか?
DateGridView

804:デフォルトの名無しさん
09/08/09 22:48:40
>>800
その本は何個のテキストボックスをポトペしていた?
10個超えてたらダウト

805:デフォルトの名無しさん
09/08/09 22:59:55
>>804
5つのコマンドボタン。
揃える技は書いてたけど、大量描画についてはコメントなし。

806:デフォルトの名無しさん
09/08/10 00:37:08
ストライクとかのアイコンはどうすんの?
結局自前で描画する予感
なら1枚絵で作ってしまえ!とか

807:デフォルトの名無しさん
09/08/10 00:42:53
DataGridViewはアイコン置けるよー

808:デフォルトの名無しさん
09/08/10 01:34:20
複数の定数を定義したクラスの中に存在する、
定数に要素に全てアクセスするにはどうすればよいでしょうか?
for each 的なコードがあればお教えください。

class TestClass
{

  public const string const_test_1 = "aaa1";
  public const string const_test_2 = "aaa2";
  public const string const_test_3 = "aaa3";
  public const string const_test_4 = "aaa4";
}



809:デフォルトの名無しさん
09/08/10 01:39:29
設計から見直せタコ

810:デフォルトの名無しさん
09/08/10 01:41:46
>>808
案1 人手で全て列挙を行う
案2 コンパイラの忠告を無視して後々のメンテナンスを全て投げきってもいいならリフレクション

後で人手で行った場合の数倍のツケを支払う覚悟があるなら
機械的にリフレクションを通してもいいかも

811:デフォルトの名無しさん
09/08/10 01:41:54
配列で用意しとけよそんなん

812:デフォルトの名無しさん
09/08/10 01:47:17
>>810
案2の方法をお教えください。



813:デフォルトの名無しさん
09/08/10 01:48:25
>>812
c# リフレクション フィールド 列挙
で出てきたの↓
URLリンク(dobon.net)

814:デフォルトの名無しさん
09/08/10 01:50:23
>>813
ありがとうございました。

815:デフォルトの名無しさん
09/08/10 02:11:58
リフレクションなんか馬鹿に勧めるな馬鹿。

816:デフォルトの名無しさん
09/08/10 02:29:09
>>815
馬鹿のお前がいっても説得力がない。

817:デフォルトの名無しさん
09/08/10 02:31:24
リフレクション使って全部実行時に行う必要もなくて

一旦リフレクション使って集計して
その後手作業でソース起こしてもいいかもね

818:デフォルトの名無しさん
09/08/10 07:04:01
yieldでよくね?

819:デフォルトの名無しさん
09/08/10 09:10:28
>>817
これはよくやる
自動生成しちゃえばいいんだよね

820:デフォルトの名無しさん
09/08/10 11:09:01
リフレクションとか難しすぎて頭おかしくなりそう

821:デフォルトの名無しさん
09/08/10 11:26:49
>>819
日本語としては「ひちがつ」が正しいがレッドブックの「なながつ」も間違いではない
ただ朝鮮人や関西人が良く使う「しちがつ」は明らかに間違い
これを使っていると日本人である事を疑われるので気を付けるように

822:デフォルトの名無しさん
09/08/10 11:31:29
>>821
なんか最近BOT多くね?

823:デフォルトの名無しさん
09/08/10 14:27:14
馬鹿ウヨ死ねや

824:デフォルトの名無しさん
09/08/10 20:20:39
lex とか yacc を思いだした

825:デフォルトの名無しさん
09/08/11 00:07:46
リフレクション使うならせめてconstではなくreadonly使おう
constとリフレクションは非常に相性が悪い

826:デフォルトの名無しさん
09/08/11 01:13:45
>>825
もしかしてCLI時点でconst修飾の名前ってきえちゃうの?

827:デフォルトの名無しさん
09/08/11 01:29:13
ビルドした時点でリテラルに置き換わるんじゃなかったか

828:デフォルトの名無しさん
09/08/11 01:31:13
んだよ
だからリテラルにできない物はconst宣言できない

829:デフォルトの名無しさん
09/08/11 01:38:09
使用した場所はリテラルに置き換わってるが、
型の定義としては残っているのでリフレクションで確認できる。

public static const field System.String const_test_1


830:デフォルトの名無しさん
09/08/11 01:40:05
ildasmの表記のほうがいいな。

.field public static literal string const_test_1 = "aaa1"


831:デフォルトの名無しさん
09/08/11 01:57:24
しょうがないんだろうけれど、Attributeのコンストラクタ?に普通のオブジェクト生成式とか書けるようになって欲しいお(´・ω・`)

832:デフォルトの名無しさん
09/08/11 02:26:21
むちゃゆうな
まあ気持ちは分かる


833:デフォルトの名無しさん
09/08/11 08:30:52
Expression<TDelegate>さえ書ければ解決なのに

834:デフォルトの名無しさん
09/08/12 02:27:35
TDelegateってなんだ。

835:デフォルトの名無しさん
09/08/12 06:20:06
Delegateは特殊クラスなのでこういう制約は作れないってことだと思う。
class F<T> where T : System.Delegate


836:デフォルトの名無しさん
09/08/12 20:09:48
IL 上作れないわけじゃないよ。実際 ECMA335 には
一例として載ってる。
要するにわざと禁止しているものなので理由を考えて
みるといいと思うよ

837:デフォルトの名無しさん
09/08/13 15:52:09
1日分のログを日付フォルダごとに分けて保存していて
一定期間経過したフォルダを
DirectoryInfo.Delete(true)で削除しているんだが
毎日少しずつ削除時間が延びていくんだが
なんか理由知っている人いない?
削除の他にも処理をしているんだが
なぜか削除だけ時間がかかる
IOの問題なのかな?

ちなみに、、、
OS:windows 2003 server R2
Enterprise x64 Edition
Service Pack2

838:デフォルトの名無しさん
09/08/13 16:39:00
普通にコマンドで消した時は遅くないの?

839:デフォルトの名無しさん
09/08/13 20:45:04
削除してる間にログを他者が見てるって事はないの?
そもそもログの量、大きさは同じくらいなの?

840:デフォルトの名無しさん
09/08/14 00:23:18
処理内容がわからんから何とも胃炎。
毎日一定時間に処理をしてるんじゃないのか。

削除終了時に終了後から一定時間をセットするなら
削除処理にかかる時間分ずれていくだろ。

841:デフォルトの名無しさん
09/08/14 00:45:25
すいません
vista + C# express edition + excel2007です
参照設定で参照の追加でcom タブでmicrosoft excel5.0をみると
microsoft excel5.0 ?????????? と出てるんですけど・・・
これって一体・・・・2007以前のexcel入れれば治るのでしょうか?
とても不安です・・・
壊れてるのかなC#・・・(涙

842:デフォルトの名無しさん
09/08/14 02:03:58
>>837
最初は断片化かな?とか思ったけど、メモリリークな気もする。
C#はジェネリクスとnewで管理されているけど解放されないメモリが
簡単にできちゃうから、仮想メモリにガリガリアクセスして時間が
かかってしまう可能性も否めない。
Process Explorerあたりで確認して、GCのジェネレーション2が
異常にでかいサイズなら解放漏れ(ジェネリクスのClearやDisposeのし忘れ)を
確認してみたらどうだろう。

843:デフォルトの名無しさん
09/08/14 02:06:10
>>842
気になる
これってアンマネージドで管理されているメモリの話?
それともマネージドだが古すぎてpermanent(永久?)領域に直ぐに移されちゃう話?
それとも両方混ざった話?

844:デフォルトの名無しさん
09/08/14 02:13:25
マネージドでしょ

845:842
09/08/14 02:35:11
マネージドの話。
ちょっと怖い書き方をしてしまったけど、要は使わないクラスがどっかで
参照されてるので消されずにメモリが圧迫されてるかも、という事です。
ソートとかで一時領域として使ってたDictionaryに、そのまま参照が残っちゃってて、みたいな。
開発中、デバッガ終了後なかなか処理が戻ってこない時はこの現象が起きてるか
疑ってみたほうがいいかも。と、経験者よりorz

846:デフォルトの名無しさん
09/08/14 05:20:44
DirectoryInfoのインスタンスは使いまわしてるか、毎回newしてるか。
Directory.Delete(String, Boolean)を使ったらどうか。

847:841
09/08/14 08:32:26
初心板にまわります

848:837
09/08/14 11:20:52
みなさん、ありがとうございます。

>>838
ディレクトリのサイズが32MBぐらいで
普通に"rmdir"コマンドで削除すると1分ぐらいです。

>>839
削除しているのは、数日経過したディレクトリなので
他の人は見てないです。

>>840
日付ごとにディレクトリを作成して
その配下に時間ごとのサブディレクトリを
作成してプロセスごとのログを出力しています。
"日付ディレクトリ"の日付を見て
数日経過していたら削除するという
処理を行っています。

>>842
自分も最初はメモリリークを疑っていました。
ページファイルが1日で5MBずつ増えていますが
そのせいで削除処理が約30秒も伸びるんでしょうか?
削除処理だけで、他の処理は遅くなっていないのも
気になっています。

>>846
毎回newしています。
解放処理は明示的に行っていないので
参照が残ってしまっているのでしょうか?

849:デフォルトの名無しさん
09/08/14 12:18:00
>ディレクトリのサイズが32MBぐらいで
>普通に"rmdir"コマンドで削除すると1分ぐらいです。

850:デフォルトの名無しさん
09/08/14 12:58:35
削除の処理にかかる時間が延びてるってことか

851:デフォルトの名無しさん
09/08/14 13:54:14
32MBで一分ってその時点で遅すぎねーか?

852:837
09/08/14 14:04:49
>>850
そうです。
削除の時間が日々伸びています。

>>851
ディスク上のサイズは204MBでした。
遅すぎですかね?

853:デフォルトの名無しさん
09/08/14 14:07:13
ファイル数くらい書けよ。
エスパーさせんな

854:デフォルトの名無しさん
09/08/14 14:08:40
シャドウコピーとかは有効になってる?

855:デフォルトの名無しさん
09/08/14 14:42:25
ファイル数がきっと膨大なはず
ファイルの数があまりに多いと関連の処理がどんどん重くなる

確かWindowsのファイルテーブルてツリー構造してるの見た目だけで
実際はドライブごとに一つの表があるだけだから
ドライブ内のファイル/フォルダの数が多くなる度に
ファイル/フォルダ絡みのあらゆる動作が遅くなる

間違ってたらごめん

856:デフォルトの名無しさん
09/08/14 15:14:19
NTFSだったらB木使ってるからFAT32よりも格段に速いよ

857:デフォルトの名無しさん
09/08/14 15:22:48
>>856
フォルダの中身ごと削除の時点で全スキャンだし

858:837
09/08/14 15:58:22
>>853
すみません。。
フォルダ数:約9500
ファイル数:約52500
膨大な数ですよね。

>>855
毎回削除する"フォルダ数"/"ディレクトリ数"は
変わらないのですが
それでも段々遅くなるのでしょうか?



859:デフォルトの名無しさん
09/08/14 16:07:16
>>858
数日でそんなに溜まるログとか設計が狂ってる

860:デフォルトの名無しさん
09/08/14 16:10:39
いっその事DBにログ記録しろ

861:デフォルトの名無しさん
09/08/14 16:18:10
単純に一日のログを1ファイルにまとめるだけでも
相当マシになるはず

862:837
09/08/14 17:51:15
みなさん、ありがとうございます。
設計というよりも、そういう仕様なので
仕方ない部分もあるのですが・・・

アドバイスを参考にしたいと思います。

863:デフォルトの名無しさん
09/08/14 18:46:36
それ、プログラム終了させて新たに起動したらあきらかに速度が違う
というのなら、今まで消したファイルもスキャンしてるとかないか?

864:842
09/08/15 01:15:55
>ページファイルが1日で5MBずつ増えていますが
>そのせいで削除処理が約30秒も伸びるんでしょうか?
>削除処理だけで、他の処理は遅くなっていないのも
>気になっています。

その、今の所、日を追うごとに増えているデータってのが
ページファイルだけなら疑ってみる価値はあるかと。
ファイル削除とページングでハードディスクへのリクエストがかち合って
ガリガリ言ってる時間が長くなれば可能性はあるかと。

削除プログラムが常駐プログラムなら一度再起動してみて速度をみてみるのはどうだろう?
それ以前にgen2の値はどうなんだろう?これでリークか否かの答えは出ると思うんだけど。

毎回起動なら、そのページファイルを増やしている別のプログラムをつきとめた方がいいかも。
なんにせよ、そのサーバはリークを起こしているっぽいw

865:デフォルトの名無しさん
09/08/16 12:42:56
webbrowserに表示しているHTMLを画像として保存するには、
どのような方法が一番妥当ですか?

クライアントの隠れている部分も含めて画像変換したいので、
PrintScreenではだめです。


866:865
09/08/16 13:00:41
ネットで探してて最初は見つからなかったのですが、
書き込んでからいろいろ見つかってきました。

URLリンク(homepage1.nifty.com)

URLリンク(www.i-tribe.info)

すみませんでした。

867:865
09/08/16 13:04:11
ここが一番よさそうでした。

URLリンク(ufreyr.blog80.fc2.com)


868:837
09/08/17 14:29:39
>>864
遅くなりましたが、「Process Explorer」で見てみました。
削除しているプログラムの値です。

#Gen0 Collection 14,220
#Gen1 Collection 5,952
#Gen2 Collection 314

Gen0 Heap Size 3,145,728
Gen1 Heap Size 30,976
Gen2 Heap Size 64,076,116

これって、リークしているのでしょうか?

869:864
09/08/17 18:07:10
Gen2を知らないなら、今だけはプログラムを起動中に常に必要なメモリサイズだと思ってください。
削除プログラムに常に必要とされているメモリが64M弱が正しいならリークしてないです。
これが削除処理を実行する度に増えているなら、かなり怪しいです。
個人的な見解としてはファイルが何ギガあっても削除するだけに64Mは異常です。
CLR Profilerで何にメモリを使っているのか調べます。
更にいうと、64M程度で体感速度に差が出るとは考えづらいです。
他のヒープも合わせ削除処理中にムチャなメモリ確保がある可能性も視野に入れます。
ただし処理時間の原因がメモリリークであり、それが改善された場合、
これ以上削除時間が延びる事は無いはずなのでクレームが来るまで放置しますw

870:デフォルトの名無しさん
09/08/17 23:10:33
サーバーでPaythonスクリプトを実行し、
特定の命令が呼び出されたら割り込みが入るまで待機ということをしたい。
それを実現するために、スクリプトを実行するごとにスレッドを呼び出してイベント来るまで待機ということをしているんだが、
これだと多数のユーザーがスクリプトを実行したときにリソースが枯渇しそうなことに気付いた。
スレッドプールで書き直したいんだが、ブロックするような処理をするのはまずいとMSDNに書いてあった.

これってイベントが来るまで待機するような処理も含まれるの?

871:デフォルトの名無しさん
09/08/17 23:44:28
どの辺にC#がw

872:870
09/08/17 23:55:18
使用言語:C#3.0

873:デフォルトの名無しさん
09/08/18 00:22:37
>>870
そのまえにペイソンとかいう言語はC#とどの程度相互運用できるんだ

874:デフォルトの名無しさん
09/08/18 00:28:52
phython≠paython

875:デフォルトの名無しさん
09/08/18 00:59:19
また変なエサを投下して・・・

876:デフォルトの名無しさん
09/08/18 01:07:01
ふぁいそん?

877:デフォルトの名無しさん
09/08/18 01:46:04
北米的にはぺいずぅぁん。

878:デフォルトの名無しさん
09/08/18 10:24:41
SORPとかでWCF使うとか

879:870
09/08/18 16:49:05
>>873
ironpaythonを使えば、楽に相互運用ができる。

880:デフォルトの名無しさん
09/08/18 17:25:17
>>879
paythonって何だよ
ironpaythonって何だよ

881:デフォルトの名無しさん
09/08/18 17:36:43
試しにググったらここのPart42が引っかかったw

882:デフォルトの名無しさん
09/08/18 20:44:15
SORP?

883:デフォルトの名無しさん
09/08/18 20:46:14
>>879
アイロンペイソンってサーバーで動かすPaythonスクリプトにもなれるの?

884:デフォルトの名無しさん
09/08/18 21:22:55
おまえらペイトホンも知らねーのかよ。

>>870
マジレスしようと何度か読み直してみたがさっぱり意味が解らない。
とりあえず質問の内容は最後の2行のみ?
で、ブロックしそうなのはクライアント側?サーバ側?
っつか多分日本語でやりとりしてもらちがあかなそう。簡単なソース出して
これはおk?ってやった方が、キミとは上手くやっていけそうな気がする。

885:デフォルトの名無しさん
09/08/18 21:53:42
boid mein() {
}

とかってコード期待w

886:デフォルトの名無しさん
09/08/18 22:35:00
>>869
亀だが・・・

64M程度ならドトネトでは普通じゃないかと思う
結局メモリ量は予約領域でもあるはずだから純粋に使用しているメモリというわけではないだろうし

887:870
09/08/18 23:54:18
>>884
ソースをさらします。
サーバーがRunScriptというパケットを受け取ると実行される
void talk()
{
Thread t = new Thread(executeScript);
t.Start(this.remoteip);
}
private void executeScript(object data)
{
PythonEngine pe = new PythonEngine();
pe.deliverVarible("_self", this);
pe.deliverVarible("_target", target);
pe.deliverVarible("_remoteip", (string)data);
pe.execute("foo.py");
}
//リモートIPとManualResetEventが対になってる
static Dictionary<string, ManualResetEvent> ManualEvent = new Dictionary<string, ManualResetEvent>();
//foo.pyがwaitForSignalを実行すると呼び出させる
public void waitForSignal()
{
if (remoteip == null) return;
ManualEvent[remoteip].Reset();
ManualEvent[remoteip].WaitOne(Globals.script_wait_time);
}
//別スレッドから呼び出し
public void setSignal()
{
if (remoteip == null) return;
ManualEvent[remoteip].Set();
}


888:870
09/08/18 23:55:49
訂正
×//別スレッドから呼び出し
○//同じクライアントから特定のパケットを受け取ると呼び出される(パケットを受け取る部分は非同期ソケットを使ってます)

889:デフォルトの名無しさん
09/08/19 00:08:34
Directory.Delete("パス",true);
これに64Mはありえない。それからgen2は回収に何度か失敗している領域。
現在使用中かつ長い間確保されている可能性が高い。

とまぁ、レスの情報と自分の経験からの推測な訳です。はい。
本当に64Mが適正か否かは>>837氏のみが知る所でしょう。

890:デフォルトの名無しさん
09/08/19 19:00:23
質問です

今ちょっと頼まれて
テキストボックスとボタンのフォームだけがあります。
そしてそれに必須入力チェック、桁数チェック、書式チェックと言う条件を作らないといけないのですが

当方初心者でまるでわかりません。

まず、True,Falseの場合に出すメッセージボックスを作ります。
そしてIF文でどっちに行くかを条件付けるんですが
どのようにして記述していけばいいのでしょうか・・・・

891:デフォルトの名無しさん
09/08/19 21:30:38
ググれ

892:デフォルトの名無しさん
09/08/19 21:31:42
初心者向けの本でも買え。

893:デフォルトの名無しさん
09/08/19 21:53:52
カスどもありがとう助かったわ

894:デフォルトの名無しさん
09/08/19 22:19:58
タブコントロールのタブなしってあるの?
アクセスではあるらしいね。

895:デフォルトの名無しさん
09/08/19 22:34:11
フラットスタイルじゃなくて?

896:デフォルトの名しさん
09/08/19 22:46:10
ふらっとの方でもたずねたのですが、返事がないので
C#を始めて1年くらいで、2Dグラフィック周りを主にやってます。
最近、JAVAプログラムのオープンソフトでJDrafter(hhp://jdrafter.com/)とい
うソフトを発見したのですが、 このソフトは、イラレ感覚で2Dグラフィックを作成し、Javaの
オブジェクトとして保存できるため、Javaプログラムからの表示やアニメーションなどにも応
用できるようなのですが、 どなたか、C#でこんなプログラムをご存知の方いないでしょうか。
もしくは、オープンソフトなので、描画周りのクラスをC#に変換して利用できないか考え
ているところですが、どなたかその方法やこれに適したjava→C#変換ツールをご存知
の方があれば、ご教授をお願いします。

897:デフォルトの名無しさん
09/08/19 22:54:20
何文字目?

898:デフォルトの名無しさん
09/08/19 22:55:30
Java使えよ

899:デフォルトの名無しさん
09/08/19 22:56:59
つJ#

900:デフォルトの名無しさん
09/08/19 22:59:36
>>895
フラットスタイル…
C♯にあるの?

901:デフォルトの名しさん
09/08/19 22:59:48
>>898
javaに変えてもいいのですが、今までの資産や、C#の将来性を考えると簡単に
は決断できません。
ググってもみましたが、どうしてもわからないのでお尋ねしているところです。

902:デフォルトの名無しさん
09/08/19 23:01:03
つか xaml に変換できるもの、Expression とかがまさにそのまま
イラレ感覚がいいんならイラレ -> xaml のエクスポータ使えばー

903:デフォルトの名しさん
09/08/19 23:17:21
>>902
ありがとうございました。
xamlテクノロジーは始めて知りました。(勉強不足ですみません。)
xamlについて調べて、フリーの(金がないので) ツールなんかがない
かいググります。どうもありがとうございました。

904:デフォルトの名無しさん
09/08/19 23:36:49
イラレってxaml生成できんのか。おどろいた。

905:デフォルトの名無しさん
09/08/19 23:49:29
XPSじゃねーのと思って調べたらほんとにXAMLだった

906:デフォルトの名無しさん
09/08/20 00:11:20
イラレ10でも出力できますか?

907:デフォルトの名無しさん
09/08/20 00:59:00
プラグイン形式のやつはCS以降じゃないと無理なんじゃないかな?
Photoshop(.psd)やIllustrator(.ai)を直接取り込めるようになったBlend 3を使うのが楽だとは思うけど↓みたいなのもある。

XamlXporter for Illustrator
URLリンク(www.codeplex.com)

>>903
Inkscapeがオススメ。日本語化されてて標準でXAML出力に対応してる。

908:デフォルトの名無しさん
09/08/20 02:14:50
(´・∀・`)ヘー

909:デフォルトの名無しさん
09/08/20 06:44:32
イラレでコントロールを作成してWPFコントロールにすることは可能なの?

910:デフォルトの名無しさん
09/08/20 07:02:50
仮にCanvasしか吐けなくても好きなルート要素で囲んでやるだけで
ユーザーコントロールでもコントロールテンプレートでも作れるはず

911:デフォルトの名無しさん
09/08/20 08:27:03
へーへーへー

912:デフォルトの名無しさん
09/08/20 11:35:37
すいません。教えてくらはい。

VS2008のプロジェクトに*.iniファイルを含めて
プロジェクト出力として一緒に出力したいのですが、
クラスライブラリプロジェクトの場合うまくいきません。

これは仕様でなんでしょうか?

<<設定例>>
ファイルプロパティ
 ビルドアクション:コンテンツ
 出力ディレクトリにコピー:常にコピー


913:デフォルトの名無しさん
09/08/20 11:56:20

質問ですが、遅延バインディングにてExcelの単一セルの中に入っている情報を取り出すにはどうすればよいでしょうか?
遅延バインディング レイトバインディング 実行時バインディング いろんな呼び方がありますね。

URLリンク(www6.atwiki.jp) にありましたコードの一部を参照させていただいております。

// セルデータを2次元配列にいっぺんに読み込みます。
objRange_Late = objSheet_Late.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, objSheet_Late, null);
Object[,] tmpTable;
tmpTable = (System.Object[,])(objRange_Late.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, objRange_Late, null));

↑上記コードはうまくいったのですが、
単一のセルを指定し(Rangeを使うのだと思います)そのセル内のデータを取得する方法がわかりません。

やりたいこと 例)
A1セル「hoge」 の文字列hogeを取得したいです。

試しに書いたコード(実行時にエラーが出たのでできませんでしたが)を乗せておきます。

parameters = new Object[] { "A1",Missing.Value };
objRange_Late = objSheet_Late.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, objSheet_Late, parameters);
Object tmpTable = new object[1];
tmpTable = (System.Object[,])(objRange_Late.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, objRange_Late, null));

こういう雰囲気でいけそうな気がするのですが、わかりません。よろしくお願いします。


914:デフォルトの名無しさん
09/08/20 18:43:57
Webサーバ機能を、作ってるアプリに付けたいのですが、
単一ループ内でkeep-aliveを処理できるお手軽なアプローチ無いでしょうか?


// listner起動

while (true)
{
 // Context取得 (ブロック)

 // Request処理

 // Response処理

 if (Connection == close)
 {
   break;
 }
}

と言う様な処理を行い、
要は、ソケットの接続〜切断のモデルと近似にしたいのです。

理由は、データ管理や前回のリクエスト/レスポンスに強く依存した処理の為、簡単に回したいと言う感じです。

アドバイスと慈悲を下さい。



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5024日前に更新/223 KB
担当:undef