トップページ⇒tech
1001コメント308KB

C♯, C#相談室 Part35

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/03(金) 03:07:45
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0369デフォルトの名無しさん2006/11/15(水) 22:42:36
(゚д゚)ハァ?してもよろしいですか?





(゚д゚)ハァ?(゚д゚)ハァ?(゚д゚)ハァ?(゚д゚)ハァ?
0370デフォルトの名無しさん2006/11/15(水) 22:58:19
>>368
CharもInt32もただの構造体だがその辺は適当にConvertibleになってる。

つーか、君はちょっとくらい調べてから発言しようとは思わんのかね。
0371デフォルトの名無しさん2006/11/15(水) 22:59:22
よろしいです!
0372デフォルトの名無しさん2006/11/15(水) 23:13:23
>>368
char->intなら暗黙的にキャストできるだろ。
0373デフォルトの名無しさん2006/11/15(水) 23:21:47
C#でC++の特性クラスみたいなことは出来ますか?
0374デフォルトの名無しさん2006/11/15(水) 23:25:34
traitsはさすがにtemplateがないと無理だろ
0375デフォルトの名無しさん2006/11/15(水) 23:26:06
でも代わりにリフレクションがあるか。
0376デフォルトの名無しさん2006/11/17(金) 17:55:33
DataGridコントロールで、Enterキー押下時にカーソルを
左に移動する処理を行いたいのですが、下記のイベント
にブレークポイントをおいても、イベントがコールされません。
EnableはTrueになっています。

何か設定に不備があるのでしょうか?

dataGrid1_KeyPress
dataGrid1_KeyUp
dataGrid1_KeyDown

環境 VS2003 Win2003
0377デフォルトの名無しさん2006/11/17(金) 18:59:14
>>376
仕様です。
0378デフォルトの名無しさん2006/11/17(金) 19:19:55
一度StartさせたThreadを再び使用するにはどうしたらよいのでしょうか?
一度終了したThreadに対して普通に再びStart()メソッドを呼ぶとThreadStateExceptionが飛んできます…。
0379デフォルトの名無しさん2006/11/17(金) 19:31:48
終了させなければ良い
0380デフォルトの名無しさん2006/11/17(金) 19:44:50
そもそもなんで再利用したいの?
0381デフォルトの名無しさん2006/11/17(金) 19:46:37
もし可能なら毎度毎度Threadをnewするオーバーヘッド(どの程度かわかりませんが)を避けられるかな、と思った次第です。
0382デフォルトの名無しさん2006/11/17(金) 19:49:53
>>381
用途にもよるがBackgroundWorkerやその他のThreadPoolを使いなされ。
0383デフォルトの名無しさん2006/11/17(金) 19:50:07
スレッドでこんな風にすれ

while ( ! 死に時?) {
 合図があるまで待つ;
 お仕事;
}
0384デフォルトの名無しさん2006/11/17(金) 19:52:49
>>382,383
いろいろ試してみます。
ありがとうございました。

>>379
しね
0385デフォルトの名無しさん2006/11/17(金) 19:54:13
>>379=>>383なわけだが・・・しねってか
0386デフォルトの名無しさん2006/11/17(金) 20:00:05
ワラタ
0387デフォルトの名無しさん2006/11/17(金) 20:01:38
C#マネージコードでスクリーンセーバーのような
CGを描写するプログラムを書いていて、
その画面を動画ファイルとして出力する機能をつけたいと考えています。
動画を作るライブラリはVideo For Windowsなど色々あるようですが、
何を使うのが一番最適でしょうか?
0388デフォルトの名無しさん2006/11/17(金) 20:43:23
>>385
おい、死に時らしいぜ
0389デフォルトの名無しさん2006/11/17(金) 23:48:07
>>385
GCが後ろで待ってるおw
0390デフォルトの名無しさん2006/11/17(金) 23:57:22
res385 = null;
System.GC.Collect();

こうですか!!わかりません><
0391デフォルトの名無しさん2006/11/18(土) 00:30:24
便乗っぽいですけど、オブジェクト参照値をクラス変数として
持たせた場合にも参照地にnullをセットすれば勝手にGCが効くんですか?
0392デフォルトの名無しさん2006/11/18(土) 00:34:52
>>391
他から参照されてなければ刈ってくれるでしょ。

尤も実際に目で確かめる術はないけど。
0393デフォルトの名無しさん2006/11/18(土) 00:43:04
>>392
> 尤も実際に目で確かめる術はないけど。

つ WeakReference
0394デフォルトの名無しさん2006/11/18(土) 03:48:05
>>391
意味無いから、やめとけw
消えるべき時に、勝手に消える。
0395デフォルトの名無しさん2006/11/18(土) 22:40:53
質問です。

BitmapのLockbitsメソッドでゲットしたイメージメモリに対して
Cで記述したネイティブコードからイメージ操作することは可能でしょうか?

0396デフォルトの名無しさん2006/11/18(土) 22:49:18
やったことないけどunsafeコードでポインタ使って操作できるくらいだから、できるんじゃね?
0397デフォルトの名無しさん2006/11/18(土) 23:36:10
もちろんそうよ
03983952006/11/18(土) 23:36:59
395です。
今試したらできました!
0399デフォルトの名無しさん2006/11/19(日) 10:12:40
フォームクラス内にリストを作って、そこをべつのフォームから参照しようと
しているのですができません。
public List<string>でできると思ったのですが。
どうすればいいのでしょうか。どなたかご教示ください。
0400デフォルトの名無しさん2006/11/19(日) 10:37:53
非staticメンバなら
フォームクラスForm1のインスタンスをform1とすると
 form1.list
staticなら
 Form1.list
04013952006/11/19(日) 12:54:48
あ〜あ。

私のやりたかったことは、画像のエフェクト処理をCで書いたDLLに任せることだったんだけど、
試しに、Cで作ったエフェクトルーチンをC#に移植しても、スピードが変わらなかった。

C#って遅いと思ってたけど、ほぼネイティブ並のスピード出るのね・・・。
JITコンパイラはきちんとSSE/SSE2命令使ってくれるし。

すみません、チラ裏でした。
0402デフォルトの名無しさん2006/11/19(日) 13:04:23
>>401氏は頭が悪いと見た
04033952006/11/19(日) 13:12:49
頭、悪いですよー。
MSX時代から思考が止まってます。
0404デフォルトの名無しさん2006/11/19(日) 13:50:15
Z80世代はホント頭悪いからね
0405デフォルトの名無しさん2006/11/19(日) 14:23:19
>>401
まあ、遅いのは初回起動のみだし。

そういや、今、自宅で新しく買った PC に Vista RC2 入れてるんだけど、
.NET アプリの起動がむちゃくちゃ早い(ほんとに一瞬)んだけど。
これは、PC のスペックいいからなのか、
Vista では CLR の最適化かかってるからなのか、どっちなんだろう?
0406デフォルトの名無しさん2006/11/19(日) 14:26:00
OS起動時にロードされてる
0407デフォルトの名無しさん2006/11/19(日) 14:36:18
うむ、知らないで遅い遅い言ってる馬鹿もいるんだよなあ
0408デフォルトの名無しさん2006/11/19(日) 14:58:53
>>405
うちでは大差ないよ。
たぶんスペックのせいかと
0409デフォルトの名無しさん2006/11/19(日) 15:24:10
XPとVista両方に.Net製のシェルエクステンションを仕込んでるけど、
XPはログオンに時間がかかるがVistaは確かにかなり速い。
0410デフォルトの名無しさん2006/11/19(日) 15:38:06
Vistaはリソース食い過ぎ('A`)


そういえば、Vista対応のために、XPからの変更点のまとめってありませんか?
システムフォルダがお引っ越しor内部で勝手にリンクするというのは聞いたんですが。
0411デフォルトの名無しさん2006/11/19(日) 15:38:58
Vista1/31リリースだっけか・・・
3年後位には主流になるのかねぇ・・・

0412デフォルトの名無しさん2006/11/19(日) 16:26:05
馬鹿発見>>408
0413デフォルトの名無しさん2006/11/19(日) 21:04:14
>>405
SuperFetchが効いてるんじゃね?重量級のアプリにはかなり
効くようだ。VSとか。
メモリたくさんつまないと駄目だけど。
04144052006/11/19(日) 21:23:29
>>413
メモリ2GB積んでる。
無駄にオーバースペックなもの買ってみた。

要するに、JIT が早いのは単にプロセッサ性能、
動作が速いのは .NET Framework のコンポーネントが
SuperFetch であらかじめメモリ上にロードされてるから
ってことでいいのかな?
0415デフォルトの名無しさん2006/11/19(日) 21:48:04
意外と知らないで遅い遅いと.NET使ってる奴が多いってことか
なんだかね
0416デフォルトの名無しさん2006/11/19(日) 23:28:29
>>415
パソコンを使っている人の大半はあなたみたいなヲタクではありません。
大半の人に使っていただくためには屁理屈こねて遅くないんだよなんていってて・・・
0417デフォルトの名無しさん2006/11/19(日) 23:33:11
>>416
415じゃないけど、開発者する人間なら…
04184172006/11/19(日) 23:33:49
× 開発者する人間
○ 開発する人間
0419デフォルトの名無しさん2006/11/19(日) 23:36:37
C#で開発?
0420デフォルトの名無しさん2006/11/19(日) 23:57:28
初心者と勘違いPGが紛れ込んでますねw
0421デフォルトの名無しさん2006/11/20(月) 00:13:35
ヲタクばっかですねw
04223952006/11/20(月) 08:42:22
ベンチマークです。

pentium4 1.7GHz
C#(JIT):16593.75ms
C(SSE2):19250ms
C(SSE):15031.25ms
C(FPU):20125ms

athlon64 2.4GHz
C#(JIT):4296.875ms
C(SSE2):3640.625ms
C(SSE):3796.875ms
C(FPU):6859.375ms
0423デフォルトの名無しさん2006/11/20(月) 10:33:07
>376
もう遅いかもしれないけど、そのセルを編集中かどうかで変わってくる。
編集中はセルのEditingControlがイベントを受け取るので、
そっちで処理しないといけない。
0424デフォルトの名無しさん2006/11/20(月) 10:43:03
>>415
普通のプログラマなら、遅いのが、
・不適切なアルゴリズム選択による遅さなのか (ex. クイックソートとバブルソート、ハッシュ探索と線形探索)
・設計のまずさに起因する遅さなのか
・他のサブシステムに起因する遅さなのか (ネットワーク、ウィンドウシステム、ディスクI/O、など)
・本当に、言語による遅さなのか
などを、経験なり、思考なり、プロファイラ使うなりして判断できるが、
ヘボプログラマ程、遅さの原因を考えることなく、言語のせいにする。
ましてや、自分のアルゴリズム選択ミスだなんて考えもしない。
最終的には、CPUが遅い、とかぬかしだす。
0425デフォルトの名無しさん2006/11/20(月) 11:04:14
MFCでいうところの SetRedraw(BOOL) ってありますか?

Form上のLabelなどの表示を切り替える際に、一度Labelをクリアしてから値代入してるのですが
04264252006/11/20(月) 11:04:56
それだと2回描画してしまうので、描画を抑えたいのです


途中で送信してしまいました・・・
0427デフォルトの名無しさん2006/11/20(月) 11:08:42
コンテナをSuspendLayout/ResumeLayout()したらどう?
0428デフォルトの名無しさん2006/11/20(月) 11:12:00
WM_SETREDRAWを送れば
04294252006/11/20(月) 12:06:26
>>427 ありがとうございました (≧∇≦)b
0430デフォルトの名無しさん2006/11/20(月) 13:42:37
ファイルハッシュを取得する関数ってありますでしょうか?
MsiGetFileHash のような関数を探しているのですが、見つけられなくて…(´д`;
0431デフォルトの名無しさん2006/11/20(月) 15:03:37
>>430
using System.Security.Cryptography;
かな?
0432デフォルトの名無しさん2006/11/20(月) 15:04:57
PInvokeするか
MD5CryptoServiceProviderにFileStreamくわせるか、かな?
04334302006/11/20(月) 15:35:35
>>431-432
ありがとうございます、試してみますm(__)m
0434デフォルトの名無しさん2006/11/20(月) 21:39:41
初めまして。
現在既に起動しているIE6.0のWindowハンドルを取得し、その上に線の描画を行おうとしています。
IEのWindowハンドルは取得できたのですが、そこから線を描画する方法が分かりません。
どの様な解決方法があるでしょうか?
どなたかご教授下さい。
0435デフォルトの名無しさん2006/11/20(月) 21:52:13
多分全部 Win32API / GDI でやった方が早いな。
GetDC / CreatePen / SelectObject / LineTo 辺りか?
ただし 434 が望んでる結果になるとは限らない。
0436デフォルトの名無しさん2006/11/20(月) 22:00:29
再描画とか考えたら面倒くさそうだな。
0437デフォルトの名無しさん2006/11/20(月) 22:04:10
hdcからGraphicsオブジェクトとって描画なら簡単だけど、
>>436の言う通り、再描画が発生したら消えるね
0438デフォルトの名無しさん2006/11/20(月) 22:36:26
>434です。
透明なFormWindowを作成してそこに線を描画し、IEのWindowの上に被せるという
方法も考えたんですけども。。。

>>435 さんと >>437 さんの方法は同じ方法なんでしょうか?
0439デフォルトの名無しさん2006/11/20(月) 22:41:03
[DllImport( "user32.dll" )]
private static extern IntPtr GetWindowDC( IntPtr handle );
[DllImport( "user32.dll" )]
private static extern IntPtr ReleaseDC( IntPtr hWnd, IntPtr hDC );

private void button1_Click( object sender, EventArgs e )
{
    IntPtr hWnd = IEのウインドウハンドル
    IntPtr hDC = GetWindowDC( hWnd );// またはGetDC
    Graphics g = Graphics.FromHdc( hDC );

    //好きに描画
    g.FillRectangle( SystemBrushes.ControlText, new Rectangle( 0, 0, 100, 100 ) );

    g.Dispose();
    ReleaseDC( hWnd, hDC );
}
0440デフォルトの名無しさん2006/11/20(月) 23:34:21
>>434です。

>>439さん。有難う御座います。
この方法でIEのWindowに描画することが出来ました。
ここから線の再描画をする方法を採ってみようと思います。
0441デフォルトの名無しさん2006/11/21(火) 00:00:33
(^^)イイエ、ドウイタシマシテ
0442デフォルトの名無しさん2006/11/21(火) 00:13:41
>>441は>>439じゃないと俺の直感が騒ぐ
0443デフォルトの名無しさん2006/11/21(火) 00:35:50
DivXのCodecがインストールされている環境で
動画ファイルをDivXで圧縮するツールを
作りたいと思うのですが、.NET1.1 + C#では
どのようにしたらいいのか、どなたかヒントを
いただけませんか。

やりたいことは
 複数のデジカメ動画を検索し
 DivXで圧縮し
 あるルールでファイル名を付け
 タイムスタンプを変換元ファイルに合わせる
という感じです。

「DivXで圧縮し」以外の部分はできています。

よろしくお願いします。
0444デフォルトの名無しさん2006/11/21(火) 00:51:42
コマンドラインでaviutilを起動する
0445デフォルトの名無しさん2006/11/21(火) 01:07:45
>>443
DirectShow叩けばいいんじゃないか?
0446デフォルトの名無しさん2006/11/21(火) 08:09:55
>>444,445
どっちがやりやすいか調べて試してみます。
ありがとうございました。
0447デフォルトの名無しさん2006/11/21(火) 15:59:46
文字列のリストに対して、リスト内の個々の要素の文字列の編集を行う処理を考えています。
更に、全てのリスト内の文字列の編集処理後、メインの関数を抜けたいと考えています。
リストにしているのは文字列の順番を記憶したいからです。

以下のThreadMethodように引数を持つスレッドを作成したい場合、
ThreadPoolを使うと良いそうなのですが、joinのような待ちの実現方法が分かりませんでした。

ThreadPoolでの待ちの実現について、また、ThreadPoolを使わなくてもできるよ。そもそもリストじゃなくてこうすれば効率が良い!など、アドバイスいただければと思います。

public bool MainMethod( .... )
{
 ArrayList arrayList = new ArrayList(); // (仮)
 
 // arrayListの個々の要素に文字列を生成する処理

 WaitCallback waitCallback = new WaitCallback(ThreadMethod);// コールバック作成
 
 // arrayList要素数分ループ
 for(int i = 0;i < arrayList.Count; i++)
 {
  // スレッドでarrayListの文字を更に改変する処理
  ThreadPool.QueueUserWorkItem(waitCallback, arrayList[i]);
 }
 
 // 待ち
 return true;
}

public void ThreadMethod(object aStr)
{
 // aStrの編集
}
0448デフォルトの名無しさん2006/11/21(火) 16:35:54
ThreadPoolは使ったことないが、なんで別スレッドにする必要があるの?
joinするんだったらメインスレッドがブロックされるから別スレッドにする意味がないのでは?
0449デフォルトの名無しさん2006/11/21(火) 16:37:11
まず、リストのアイテム編集ごときになぜ別スレッドを使いたいのか分からない。
だって終わるまで待ちたいんでしょ?

どうしてもスレッド使いたいなら、
Thread.Startで引数にArrayListそのものを渡してそっちでループしたら?
あと、.net2.0ならList<string>使った方がいいんじゃ?
0450デフォルトの名無しさん2006/11/21(火) 17:04:55
ThreadPoolは挙動が信用できないので自分で同じような仕組みを作り、Jobとして渡している。
Jobについては下位Jobを持つことができ親Jobは下位Jobがすべて終わった場合にそのJobが終わったことになる。
0451デフォルトの名無しさん2006/11/21(火) 17:27:51
誰と喋ってるんですか?
04524502006/11/21(火) 21:48:54
独り言、気にするな。
0453デフォルトの名無しさん2006/11/21(火) 21:54:07
>>452
オナニーは別な所でやってください
04544502006/11/21(火) 22:02:40
   ∧∧
   /⌒ヽ) 
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三三
0455デフォルトの名無しさん2006/11/21(火) 23:37:30
SplitContainerでVerticalで使用しています。
通常右の部分は必要ないので左の部分がFormいっぱいに表示されていて
なんらかのトリガでFormの半分づつに左右が表示されるようにするには
どうしたらいいですか?
C#
0456デフォルトの名無しさん2006/11/21(火) 23:41:06
幅を計算して SplitterDistance だったかに代入すればいいじゃん
0457デフォルトの名無しさん2006/11/21(火) 23:41:17
いらんときは左のコントロールを直接フォームに載せとけばいいんじゃね
0458デフォルトの名無しさん2006/11/21(火) 23:42:50
Panel1Collapsedとかなかったか?
0459デフォルトの名無しさん2006/11/21(火) 23:45:30
エクリプスでC#を使えるようにする方法を教えてください
できるとききました
0460デフォルトの名無しさん2006/11/21(火) 23:48:03
言った奴に聞けよ
0461デフォルトの名無しさん2006/11/21(火) 23:50:17
>>459
やめとけ。えくりぷすなんて、java以外で役にややない。
0462デフォルトの名無しさん2006/11/22(水) 00:06:33
>>459
http://www.improve-technologies.com/alpha/esharp/
「eclipse csharp」で見つかったけど。
0463デフォルトの名無しさん2006/11/22(水) 00:10:22
>>462
まりが�d♪
>>461
使いやすいよp使えば使うほどはまるしするめみたいなもんだおp
0464デフォルトの名無しさん2006/11/22(水) 02:38:47
C#つか、マネージコードでLWやMAYA、3DSといったヘビーなCGソフトって作れるの?
動けばイイ程度のものなら俺でも作れるが、数十万、数百万出して購入するユーザを
納得させるのは難しそう
0465デフォルトの名無しさん2006/11/22(水) 07:32:22
何でそういう速度がきわめて重視されるところにマネージコード持ってくるかな(´-`).。oO(・・・・・・・・・)
でも速度以外の面では遜色ないもの作れると思うよ。
0466デフォルトの名無しさん2006/11/22(水) 07:57:36
CPUの速さが現在の2倍になればおk
0467デフォルトの名無しさん2006/11/22(水) 07:59:22
>>401
>>401
>>401
>>401
>>401
0468デフォルトの名無しさん2006/11/22(水) 08:20:09
>>464の質問は、

20年前のプログラマに
「C言語つか、コンパイラで吐き出したコードでファミコンのアクションゲームって作れるの?」
と質問するのと変わらん。


■ このスレッドは過去ログ倉庫に格納されています