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

C#, C♯, C#相談室 Part71

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/03/24(土) 16:43:24.60
前スレ
C#, C♯, C#相談室 Part70
http://toro.2ch.net/test/read.cgi/tech/1327570969/

Visual Studio 2010 Express
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx
0237デフォルトの名無しさん2012/04/17(火) 23:58:40.56
>>236
100件とかそんな程度だとどうでも良いんだろうけど、
5000件とか超えた辺りから差がもろに実感できるようになるし。
0238デフォルトの名無しさん2012/04/18(水) 00:11:32.13
C#あんまり関係ないけど、C#以外のサンプル出されてもわからないので、ちょっとここで排他処理の実装方法について質問を。。
アンマネージドメモリをプロセス間の共通メモリとして使ってて、排他処理を自前で実装しようとしてます。

プロセス1、プロセス2があったとして、
処理Aを実行しているときはロックして他のプロセスを排他制御したいとする。
1.まず、プロセス1が、メモリA(1byte)を見て0が入ってることを確認する。
2.プロセス1はメモリAに1という数字を入れる
3.プロセス1は処理Aを実行する
4.その間、プロセス2が処理Aを実行しようとするが、その前に、メモリAを見る。
5.メモリAには1という数字(フラグ)が入っているので、処理Aを実行してはいけないと判断し、メモリAが0になるまで待つ。
6.プロセス1は処理Aを終えた後、メモリAに0を入れる。
7.プロセス2がメモリAに0が入ってるのを確認し、処理Aを実行する

これがミューテックス?違う?
でもこれだと、プロセス1がメモリAを見て、フラグが入っていないことを確認するというステップ(隙)があるから、
その後、メモリAを1にするまでに、プロセス2にメモリAを参照されちゃうと、まだメモリAには0が入っているから、
プロセス2も処理Aを実行しちゃうよね?
どうすればいいんだろう・・・。
0239デフォルトの名無しさん2012/04/18(水) 00:13:51.50
2chの専門板で日本語を多用した質問みるとイライラするんだが
まじめに考えるとフォントが悪いんだな
目が疲れるからイライラするんだな

windows+Janeだと対策方法はないんだっけ?
gdippとかgdi++を使わない
0240デフォルトの名無しさん2012/04/18(水) 00:53:29.65
>>238
だからCheck-Then-Actをサポートした機械語命令などを使う。
0241デフォルトの名無しさん2012/04/18(水) 00:54:42.36
一般にはCASというかな。
Compare-And-Set系の機械語命令など。
0242デフォルトの名無しさん2012/04/18(水) 07:16:18.75
見ないでいきなりロックすればOK
0243デフォルトの名無しさん2012/04/18(水) 07:17:51.76
>>239
つ 老眼鏡
0244デフォルトの名無しさん2012/04/18(水) 07:35:01.66
実際、適切な(?)フォント環境で見てるとそんなに疲れないのに、
フォント違うだけで疲れを体感したことはあるなあ。
0245デフォルトの名無しさん2012/04/18(水) 08:14:37.35
>>242
ロックはどういう仕組みで実装されるのかって話じゃないの?
0246デフォルトの名無しさん2012/04/18(水) 09:19:34.36
お前首の後ろにジャックないの?バイナリで読み込めよ
0247デフォルトの名無しさん2012/04/18(水) 10:44:12.74
プ
0248デフォルトの名無しさん2012/04/18(水) 10:55:17.77
クサッ お前餃子食ったろ
0249デフォルトの名無しさん2012/04/18(水) 14:43:44.51
首の後にジャック付いてる人間が当たり前にいる世界でも、
>>246のような言い回しはしないだろうなあ、と思ったりする
0250デフォルトの名無しさん2012/04/18(水) 15:15:18.06
ジャックってなんだろうと考えてた
0251デフォルトの名無しさん2012/04/18(水) 16:13:18.66
あれだろ
豆がずんずん伸びて登っていくやつ
0252デフォルトの名無しさん2012/04/18(水) 16:21:54.30
お前らの苛め方はなんか陰湿だよね
0253デフォルトの名無しさん2012/04/18(水) 16:31:33.58
こういう奴のせいで
プログラマーって根暗で陰湿でキモいって言われるんだよな
0254デフォルトの名無しさん2012/04/18(水) 18:20:08.85
↓ネトウヨ王
0255デフォルトの名無しさん2012/04/18(水) 20:49:29.56
バリバリの左翼過激派革命家ですが何か?
0256デフォルトの名無しさん2012/04/18(水) 21:31:59.57
せいぜい中国様韓国様に媚び売ってなさい
0257デフォルトの名無しさん2012/04/18(水) 21:46:55.23
>>255
さっさと尖閣に向かう準備しろよ。ヘルメットを忘れるな
0258デフォルトの名無しさん2012/04/19(木) 23:00:59.57
Graphic g = PictureBox.CreateGraphics();


これで生成したgにHoverイベントのリスナーを設定することってできるのでしょうか?
0259デフォルトの名無しさん2012/04/19(木) 23:33:14.70
Hover って MouseHover のことかな。

なら Graphics に MouseHover イベントは無いから出来ない。
PictureBox が MouseHover イベント持ってるからそれを使えばいい。
0260デフォルトの名無しさん2012/04/20(金) 00:07:27.98
>>259
ありがとうございます
HoverはMouseHoverのことでした

すると、Graphicsで描いた図形にマウスを載せたらカーソルが変化する・・・っていうのを作る場合、
Graphicsの座標を記憶しておいて、そこの範囲内に侵入したかをMouseMoveで判定して

Cursor.current = Cursor.Cross;

とかにしないといけないんですか・・・
0261デフォルトの名無しさん2012/04/20(金) 00:09:28.86
なんとなく君の話を聞いてて直感で思ったのは

いろいろと勘違いしてて変なことをしないといけないと思い込んでそう

かなw
0262デフォルトの名無しさん2012/04/20(金) 07:08:24.07
素直にオブジェクトのイベントを使ってフラグ立てるといい
0263デフォルトの名無しさん2012/04/20(金) 07:10:19.84
やったことないけどコントロールの外周を任意に設定できなかったっけ?
Regionとかで
0264デフォルトの名無しさん2012/04/20(金) 07:13:26.22
>>263
その前にイベントとCreateGraphicsが入り乱れることはないと思うんだけどなw

PictureBox上で座標とか拾って後は個別で管理してる図形との
当たり判定すればいいだけなんだし

だからこそ>>261
0265デフォルトの名無しさん2012/04/20(金) 07:17:05.89
そうだけどそんなことでしつこく弄ることもないだろ・・・
ほんと>>252これ
0266デフォルトの名無しさん2012/04/20(金) 07:21:37.75
>>263
http://dobon.net/vb/dotnet/form/formregion.html
FormじゃなくてControlにもregion適用できる
0267デフォルトの名無しさん2012/04/20(金) 07:22:41.42
>>265
陰湿なんじゃなくて文字でしかやり取りできない上に質問する人も
よくわかってないことをソースもなしで独り言をいうかのように書き込むから
こっちも的確な答えができないだけ

なので漠然とした書き込みには漠然としたやり取りになるだけ

>>258で何がしたいかわかる?
0268デフォルトの名無しさん2012/04/20(金) 07:27:47.12
>>267
質問の意味がわからなければスルーすればいい、煽ることはない
0269デフォルトの名無しさん2012/04/20(金) 07:32:01.37
相手が何を言いたいのか理解できないから相手の人格批判を始め質問を切って捨てる→陰湿な人
理解できないからスルー→普通
質問のし方が悪いと伝えて何がわからないのか説明させ直す→相手の成長を考えた上司
もしかしてこういう質問じゃないか、だとしたら答えはこれ→エスパー
0270デフォルトの名無しさん2012/04/20(金) 07:32:52.21
>>268
意味がわからないんじゃなく目指す先がわからない

この差は違うけどそう思わないんだろうな・・・


xxxのようなことを実現したいんだけど・・みたいなのがあればわかりやすいんだが
>>258のようなトンチンカンな話だけだしねえ
0271デフォルトの名無しさん2012/04/20(金) 07:33:58.89
>>269
それは質問者と同じ空間を共有してる場合だよね

文字だけでやり取りする掲示板だとリアル以上にやり取りは困難だよw
0272デフォルトの名無しさん2012/04/20(金) 07:51:25.35
まず相手を批判して侮辱して相手が如何にクズが伝えて自分が優位な立場に立ってから
もし答えを知っていて気分がよかったら上から目線で答えてあげるのがこいつ
0273デフォルトの名無しさん2012/04/20(金) 07:54:49.88
相手のレベルに合わせて話をするのを要求されるのが、リアル世界だからな。
あんなんで機嫌を損ねる人間がいるという純然たる事実の前には、
一般常識など吹っ飛ぶ世界があることを彼は知るべき。
0274デフォルトの名無しさん2012/04/20(金) 07:57:43.16
長年夫婦やってるんじゃないんだからさ

あれどこだっけ?

みたいな質問されてもわからん

結局ヒアリングするしかない

そのヒアリングの仕方がちょっとおかしく感じただけで煽られてるとか被害者ぶるのは辞めたほうがいい


そもそも質問内容があやふやだから回答するほうも困ってるんだし
0275デフォルトの名無しさん2012/04/20(金) 08:01:38.87
ヒアリングもしないで相手を馬鹿にする奴が偉そうなことを言わないで欲しい
0276デフォルトの名無しさん2012/04/20(金) 08:06:38.75
>>275
俺は、ヒアリングが下手だと言ってるんだよ。貴方は馬鹿にされたと思ったんでしょ?

ただ、貴方に配慮する義務もねーし、偉そうに言う自由もあるんだな。
0277デフォルトの名無しさん2012/04/20(金) 08:11:16.22
陰湿だと認めたということか
0278デフォルトの名無しさん2012/04/20(金) 08:12:12.46
俺とは関係ないところで話が進んでるw
0279デフォルトの名無しさん2012/04/20(金) 10:02:07.91
根暗の巣窟はこのスレですか?
0280デフォルトの名無しさん2012/04/20(金) 10:12:36.57
でも実際、開発現場では、あいまいな指示から意図を掴む能力って必要になるよねー。
0281デフォルトの名無しさん2012/04/20(金) 11:50:02.98
http://farm1.static.flickr.com/69/163628616_2172b9458c.jpg
0282デフォルトの名無しさん2012/04/20(金) 12:09:54.61
開発現場とどこぞの井戸端の区別すらつかないくらい病むんだな
違う業種でほんと良かったw
0283デフォルトの名無しさん2012/04/20(金) 12:12:58.01
プログラミングスキルよりもエスパーなスキルのほうが必要とされるのか?
0284デフォルトの名無しさん2012/04/20(金) 12:27:44.45
上流工程でクライアントの意図を掴むためにはそういうこともあるんじゃね?
0285デフォルトの名無しさん2012/04/20(金) 12:41:02.77
IBMにはエスパーが足りなかったということですね
0286デフォルトの名無しさん2012/04/20(金) 12:46:11.25
他のSI'er に比べたらましな部類じゃね?
0287デフォルトの名無しさん2012/04/20(金) 12:46:24.20
>>281
www
0288デフォルトの名無しさん2012/04/20(金) 13:28:01.05
配列a,bがあった時にa+bと書くと2つをつなげた配列を返してくれるとすごい便利だと思います
var c = a.Concat(b).ToArray();
var c = a + b;
これを拡張メソッドで
public static T[] operator+ (T[] array1, T[] array2);
と書くとコンパイルエラーになるのですが、どうすればいいでしょうか

0289デフォルトの名無しさん2012/04/20(金) 13:34:40.85
既存の型同士の演算子はオーバーロードできないので諦める
個人的には便利と思うほど配列の連結なんてやらんな
0290デフォルトの名無しさん2012/04/20(金) 13:43:40.68
演算子のオーバーロードは忘れた頃に効いてくるからやめたほうがよい
ぱっと見で組み込み型か配列か良くわからないとかバグの素
0291デフォルトの名無しさん2012/04/20(金) 13:48:57.41
そういえばC++の頃はしつこいくらいテンプレート使ってたのにC#ではぜんぜんジェネリック使わないなぁ
Linqでだいたい用事が済むからなのかな
02922882012/04/20(金) 14:16:37.12
便利だと思うんだけどなあ
無理そうなので諦めます
0293デフォルトの名無しさん2012/04/20(金) 14:21:24.45
ジェネリック、ライブラリ実装側でよく使う機能だしね。
LINQ 自身はジェネリックに作られてるけど、使う側はそれを別に意識しないという。
0294デフォルトの名無しさん2012/04/20(金) 14:22:12.34
>>292
少し便利になると思うけど、はまりどころ増す度合いの方がでかい。
array1.Concat(array2) で OK。
0295デフォルトの名無しさん2012/04/20(金) 19:05:58.70
FormのControlBoxプロパティをFlaseにしたいけれど、ウィンドウの影は表示したい場合ってどのようなトリックで実装していますか?
0296デフォルトの名無しさん2012/04/20(金) 19:34:31.10
ウィンドウの影ってのが何を指すのか分からんが
とりあえずControlBox=falseにしても普通にウィンドウボーダーが出るな
FormBorderStyleはまた別の話
0297デフォルトの名無しさん2012/04/20(金) 19:54:08.03
すきっ腹パンダンゴ
0298デフォルトの名無しさん2012/04/20(金) 20:23:58.91
>>291
使えよ、いまさら何型引数にしたらいいかワケワカメなコード書いてんじゃねぇ
0299デフォルトの名無しさん2012/04/20(金) 20:34:45.80
C#でジェネリック使わないとかなんのためにC#使ってんの?
0300デフォルトの名無しさん2012/04/20(金) 20:48:29.51
ジェネリックの new制約で、引数ありのコンストラクタを使いたい場合はどうしたらいいんでしょうか?
0301258, 2602012/04/20(金) 21:02:46.24
>>261-
すいません、今までテキスト転記とかDB登録とかばかりやっていて画像処理系はほとんどやったことなかったんです

Regionとか他のイベントとかためしてみます
ありがとうございました。
0302デフォルトの名無しさん2012/04/20(金) 21:05:09.96
>>300
それは、無理。
0303デフォルトの名無しさん2012/04/20(金) 21:10:01.02
>>302
ありがとうございます
0304デフォルトの名無しさん2012/04/20(金) 21:24:24.97
>>298
Linq使ってんだからそりゃ使ってるよ
C++の頃のようには使わなくなったって話だ
0305デフォルトの名無しさん2012/04/21(土) 00:42:41.14
いつごろだかわかんないが、プログラム言語と直接関係ない記述が、
プログラムの動作の重要な部分を決めちゃうようになってきたんだよなー。
まあ、.net は言語間の機能を共通化する意図があるんだろうけど。
0306デフォルトの名無しさん2012/04/21(土) 04:34:13.36
>>305
の言いたいことはよく分からないけど、
でもなんか酷く気になることを言ってる気がする。
0307デフォルトの名無しさん2012/04/21(土) 04:57:48.56
よろしくお願いします

http://uchukamen.com/Programming1/HTMLGet/index.htm
のページの非同期GETをみて、Webページを取得してくるものを書きましたが、

System.Net.WebException: The operation has timed out.
at System.Net.WebConnectionStream.Read (System.Byte[] buffer, Int32 offset, Int32 size) [0x00000] in <filename unknown>:0
at System.IO.StreamReader.ReadBuffer () [0x00000] in <filename unknown>:0
at System.IO.StreamReader.Read (System.Char[] buffer, Int32 index, Int32 count) [0x00000] in <filename unknown>:0
at System.IO.StreamReader.ReadToEnd () [0x00000] in <filename unknown>:0

という例外が、StreamReaderをReadToEndするところで発生してしまいます。
例外が発生したあとにもう一度、非同期GETをすると取得できることがあります。
取得するページはhttp://www.yahoo.co.jp/でブラウザなどからは問題なく見れています。

考えられる原因はどんなものがあるのでしょうか
0308デフォルトの名無しさん2012/04/21(土) 05:05:07.20
だからかいたソース出せって
0309デフォルトの名無しさん2012/04/21(土) 05:51:17.66
>>308
:
 ('A`)ノ  くまの子みていた
  ノ( ヘヘ

  ('A`) かく   ('A`) れん
  ∨)       (∨
  ((        ))

 ヽ('A`)ノ  ぼっ♪
  (  ) ゛
 ゛/ω\

       ('A` )  おしりを出した子 いっと…
      (⊃⌒*⌒⊂)
       /__ノωヽ__

 __[警]
  (  ) ('A`)
  (  )Vノ )
   | |  ω|
0310デフォルトの名無しさん2012/04/21(土) 06:48:58.76
Timeout が1秒だからじゃね?
03113072012/04/21(土) 06:54:12.93
>>308
ソースコードです

void Hoge() {
 try {
 var webRequest = HttpWebRequest.Create("http://www.yahoo.co.jp/");
 webRequest.BeginGetResponse(new AsyncCallback(requestCallback), webRequest);
 } catch (Exception e) {
 Console.WriteLine(e);
 }
}



private static void requestCallback(IAsyncResult ar) {
try {
var webRequest = (HttpWebRequest)ar.AsyncState;
var webResponse = (HttpWebResponse)webRequest.EndGetResponse(ar);
StreamReader sr = new StreamReader(webResponse.GetResponseStream());

string data = sr.ReadToEnd();
sr.Close();
Console.WriteLine(data);
 } catch (Exception e) {
 Console.WriteLine(e);
 }
}
0312デフォルトの名無しさん2012/04/21(土) 08:17:13.17
ThreadPoolに丸ごと入れるから非同期メソッド使ったことないなぁ
03133072012/04/21(土) 08:23:02.86
自己解決しました。お手数おかけしました
http://msdn.microsoft.com/ja-jp/library/system.net.httpwebrequest.begingetresponse(v=vs.80).aspx
0314デフォルトの名無しさん2012/04/21(土) 10:46:12.04
>>300
ファクトリーパターン使うのがセオリー
いちいちクラス作るのが面倒ならデリゲートで
0315デフォルトの名無しさん2012/04/21(土) 11:34:38.46
2次元配列から1次元配列を取り出すいい方法ないですか?
var array = new float[100, 100];
var row = array[0,];
みたいな。
0316デフォルトの名無しさん2012/04/21(土) 11:40:24.22
二次元配列なんぞ使うからそう言う残念なことになる
0317デフォルトの名無しさん2012/04/21(土) 11:42:32.22
>>315
ない
そういう場合に限らず、多次元配列は一切使わないで
常に配列の配列を使うのが基本
03183152012/04/21(土) 11:51:53.90
ジャグ配列はコピーするのがめんどくさいです....
コピーするのに1行では書けないですよね?
0319デフォルトの名無しさん2012/04/21(土) 11:56:09.74
>>318
100*100の一次元配列にしてy*100+xとか計算してアクセスすればいいんじゃね?
0320デフォルトの名無しさん2012/04/21(土) 11:56:52.79
List<List<float>>
0321デフォルトの名無しさん2012/04/21(土) 11:58:02.10
シリアライズしてコピーすればいいんじゃね?
0322デフォルトの名無しさん2012/04/21(土) 12:02:52.68
そもそもどういうデータが二次元配列になってて
どういうことで使うからコピーする羽目になってるのかねえ
0323デフォルトの名無しさん2012/04/21(土) 12:42:40.21
>>318
コピーするメソッド用意すればいいだろ・・
0324デフォルトの名無しさん2012/04/21(土) 12:52:57.97
array.Select(row => row.ToArray()).ToArray()
0325デフォルトの名無しさん2012/04/21(土) 13:19:48.53
for (int i = 0; i < src.Length; i++) Array.Copy(src[i], dest[j], src[i].Length);
複製なら>>324で一行だし、既存の配列へのコピーも普通に書いてこんだけだろ
0326デフォルトの名無しさん2012/04/21(土) 23:32:13.99
てst
0327デフォルトの名無しさん2012/04/21(土) 23:58:30.76
List<List<List<List<List<List<List<List<List<List<List<List<List<List<Bitmap>>>>>>>>>>>>>>
0328デフォルトの名無しさん2012/04/21(土) 23:58:51.71
1st
2nd
3rd
4th
0329デフォルトの名無しさん2012/04/22(日) 00:22:27.96
>>324
横からすいません
そのコードの意味を詳しく教えて頂けないでしょうか
0330デフォルトの名無しさん2012/04/22(日) 07:18:16.27
>>329
object[][] array0;
object[][] array1 = array0.Select(object[] row => row.ToArray()).ToArray();

こういう書き方はしないけど意味はこんな感じ
ToArray()で配列をコピーしてる
0331デフォルトの名無しさん2012/04/22(日) 09:25:05.01
array1 = new object[array0.Length][];
for (int i = 0; i < array0.Length; i++) {
array1[i] = array0[i].ToArray();
}
この場合ToArrayはCloneと同じ
このループをLINQで省略してしまうと(まったく同じというわけではないが)
array0.Select(row => row.ToArray()).ToArray()になる
0332デフォルトの名無しさん2012/04/22(日) 09:34:59.26
LINQで見た目はシンプルにしたところでコピーコストは発生するんでしょ?
ラインまたぎでコピーしないのなら>>320でいいと思うけど
0333デフォルトの名無しさん2012/04/22(日) 10:23:24.57
ToArray付けなきゃコピー発生しないよ?
0334デフォルトの名無しさん2012/04/22(日) 10:55:25.96
コピーが嫌で>>320ならいいと思う意味が分からない
0335デフォルトの名無しさん2012/04/22(日) 11:27:29.29
請願合戦で米政府HPがダウン 日本海呼称めぐり

 【ソウル共同】韓国紙の朝鮮日報(電子版)は21日、米国の教科書に記載されている
「日本海」の呼称を「東海」に変更するよう求める韓国人と、現状維持を訴える日本人が、
それぞれの要望文を米ホワイトハウスのホームページ(HP)の「請願コーナー」に互いに大量に
アップしたため、同HPが一時ダウンしたと報じた。

 同紙によると、米首都ワシントン郊外のバージニア州の韓国人会が3月下旬、
「子どもたちが間違った歴史を学ばされている」として「呼称の訂正」を要求する請願文を
寄せたのを機に、韓国人の請願運動が始まった。

http://www.kobe-np.co.jp/knews/0004992358.shtml
0336デフォルトの名無しさん2012/04/22(日) 12:23:42.53
ToArrayしたところで要素が参照型だと完全なコピーは、されない。
■ このスレッドは過去ログ倉庫に格納されています