[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 09/08 13:33 / Filesize : 32 KB / Number-of Response : 154
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとVisual C#,C♯,C#(初心者用) Part106



1 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 09:42:46.74 ]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問。
質問者自身なんだか意味がよく分からない質問。
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて、他スレ・他板へ行くことを勧められることがあります、ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとVisual C#,C♯,C#(初心者用) Part105
toro.2ch.net/test/read.cgi/tech/1371948073/

■関連スレ
C#, C♯, C#相談室 Part80
toro.2ch.net/test/read.cgi/tech/1373037260/

■コード貼るなら↓使ってください
ideone.com/

2 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 10:07:38.54 ]
XNAが終了ということを知ったんですが
いまだとirrlichtが最強なのかなと思いました
このスレの先輩にもご意見をお伺いしたいのですがこのライブラリはどうでしょうか?

3 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 11:21:57.65 ]
>>2
ゲームなら今やUnity一強
.NETじゃないけど言語はC#だよ

4 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 12:02:29.98 ]
Unityっすか
実はUnity使ってみたかったんですが
ぼくのPCだと重すぎて
メモリ1GB オンボード Celeron1コア なんですが先輩方はどのくらいのスペックでUnityを快適に開発しているのでしょうか?

5 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 12:05:12.73 ]
Unityが重いならVSの最新版もまともに動かんよ

6 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 12:15:11.02 ]
>>4
さすがに買い換えろよ
それだとVS2003で精一杯なレベルだ
UnityもVS2012も今のでっかいソフトにしては決して重くない
最新のPCなら安いノートで十分快適に動くよ

7 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 12:57:43.50 ]
3〜4万も出せばPCを買える時代の終わりは近い

8 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 13:04:12.64 ]
これからは1万円台か

9 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 14:58:48.38 ]
TypeLoadException が出たのですが、どうやって直したらいいでしょうか?

アセンブリは、ちゃんとexeと同じ場所にあるので、アセンブリ(*.dll)は読み込めてると思います。
でも、たぶん型が読み込めてない(??)みたいなのですが……

教えてください





System.TypeLoadException はユーザー コードによってハンドルされませんでした。
HResult=-2146233054
Message=アセンブリ 'HogeHoge, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ab81addb3b46712a' から型 'HogeHoge.ClassA' を読み込めませんでした。
Source=MameMame.ClassB
TypeName=HogeHoge.ClassA

10 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 15:12:40.58 ]
try{>>9}
catch(Exception e){
int n= 0;   //ここにブレークポイント設定して e の中身見ろ。解決方法が載ってる
}



11 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 15:12:55.55 ]
メッセージ通りとしか言いようがない

12 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 15:18:56.23 ]
こういうのは全ソースとバイナリ貼ってくれないと解決しないパターン

13 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 15:21:48.13 ]
必要も無いのにGACに登録してて、
コンパイルのとき指定したアセンブリと
GACのアセンブリで同期が取れてないとか

14 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 15:37:58.53 ]
こうして欲しい

DLLプロジェクトを名前変えて作り直す
厳密名その他Hogehogeの設定に近づけつつ動かす
動かなくなる設定を突き止めたら調べて正しい設定にする
ダメならダメな理由を添えてここで質問

15 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 15:48:46.42 ]
全エレメントを列挙してscrollTopを取得したのに
0より大きい値がひとつも取れないってどうゆうこと?

16 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 16:05:19.41 ]
俺んとこじゃBody.ScrollTopでちゃんととれてるから
ただの環境依存じゃない?

17 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 16:24:09.40 ]
とれたよ。マジでありがとう。

18 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:04:21.13 ]
現在マルチスレッド処理を行うプログラムを書こうとしています。
Form1とForm2が存在し、初めはForm1のみが表示されています。
Form1のボタンを押すとForm2が表示され、Form2では重い処理を行っています。
この際Form1ではそのまま処理を続行したいのでForm2のclassを作ることから表示するまでをThreadクラスを使って別で処理させて、そのままForm2の描画および処理を行っています。
ですがボタンのイベント内で行っているので、イベントを抜けた途端にForm2も消滅してしまいます。これを解決する方法はないのでしょうか?

19 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:10:36.69 ]
Form2の表示はApplication.Runを使う必要があると思う

20 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:12:39.76 ]
スレッドはSTAね



21 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:34:26.16 ]
重い「処理」だけスレッドに追い出せばForm2自体はスレッド分ける必要ないだろ

22 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:37:57.41 ]
別にフォームごとサブスレッドにしてもいいと思う

23 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:42:31.43 ]
どう実装してるのか解らないけど、Form1のフィールドとしてForm2とスレッドの
変数を用意し、ボタンイベント内でそれぞれをインスタンス化すればいいんじゃ
ないの?
ボタンイベント内で変数を定義していないか?

24 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:45:01.53 ]
何言ってるのかさっぱり意味不明な質問によく回答できるよね。
ア○な質問者よりそっちに関心するわ

25 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:46:08.07 ]
>>21
そうだね
前にグレープシティのコントロールがマルチスレッドだと落ちるって情報を見かけたし、
UIは安易にマルチスレッドに頼らない方が良い

26 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:48:49.15 ]
でもフォームごと別のスレッドにしないと元スレッドのUIの処理の
影響受けちゃうからなぁ。あれは嫌だなぁ。

27 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 17:52:23.40 ]
>>24
暇なんだw
確かにForm2が全然イメージ出来ない
重い処理をForm2に押し付けたらすぐ応答なしになっちゃうし、何がしたいんだろうねw

28 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:00:17.37 ]
>>26
影響受けちゃうと言うか受けないように作るべきだけど面倒だよね

29 名前:デフォルトの名無しさん [2013/09/07(土) 18:01:58.30 ]
C#で作ったアプリケーションを起動してみたら
アプリケーションを正しく起動できませんでした(0xc000007b)
ってエラーがでたんだけど解決方法わかります?

30 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:07:57.16 ]
64bit環境で32bitアプリを起動したとか?



31 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:13:40.33 ]
ワオキツネザルを無効にしてるんじゃなければ(そもそも無効にできるかどうか知らんけど)
それで問題が起こるとは思えませんが。

32 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:19:52.68 ]
自分でも何を質問してるのかわからない状態に陥っていますが…
再度整理すると、
現状ではボタンのクリックイベント内に別のFormクラスを宣言させて、Show()メソッドでForm2を表示しています。
Form2で行いたいことは、Form2内のボタンを押すとファイルを読み取りファイルを編集し、終わった後にForm2を自動的に閉じる、というものです。
ですがファイルサイズが大きいので動作が重くなってしまい、呼び出したForm1が止まってしまいます。

Application.Run()を使ったら
単一スレッド上で 2 回目のメッセージ ループを開始することは有効な操作ではありません。Form.ShowDialog を使用してください。
というエラーが表示されてしまいました。

33 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:20:15.32 ]
うんそうだね

34 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:22:53.91 ]
>>32
>>33>>31
Application.Runはバックグラウンド実行させるメソッドの中だよ

35 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:29:43.10 ]
>>32
>Form2内のボタンを押すとファイルを読み取り
この「ファイルを読み取る」のが遅いんだから、その部分だけを別スレッドにすればいい

36 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:33:45.51 ]
>>32
>>35の言うとおり、そうしないとForm2がフリーズする事になる。

37 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:35:48.31 ]
非同期も選択肢がだんだん増えて便利になった分、ゼロから覚える人は大変だよな。
まあデキる人ならどの道3日ぐらいでものにしちゃうのかもしれんが。

38 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:41:32.66 ]
ファイル読み取りを別スレッドにわけて、その処理の最後にfinishフラグのboolをtureにし、Timerで1秒間隔で読ませて、条件を満たしていたらFormを閉じるという無理やりな処理ですが、一応目標は達成できました…
もっといい処理はないものでしょうか…?

39 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:45:58.76 ]
invokeする

40 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 18:50:58.93 ]
>>38
これ最適化で無限ループ化するやつだよね



41 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 19:14:26.20 ]
>>38
スレッドにフォーム渡しておいて、読み込み終わったらform.Close()
↑こういうやり方すると誰かが文句いうが気にしない

42 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 19:27:14.79 ]
処理が終わったら閉じるとか、form2って単に処理中とか
プログレスバーを表示するだけのものなのか?
だったらそれ自体不要なんじゃないのかな

43 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 19:48:35.69 ]
その重い処理から定期的にメッセージループを回せよ。
どうせプログレスバーも更新する必要もあるんだし。

44 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 19:50:42.87 ]
>>41
invokeでだよね

>>42
ボタンを押したらって書いてあるからファイル選択するんじゃないか?

45 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:19:23.96 ]
NET4.5以降ならAsync/Awaitの出番
TaskやBackgroundWorkerでもよい

46 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:21:08.49 ]
ファイル読み込みなんだからボトルネックはHDD。
いちいちスレッド使うなよw 同期とかで余計に複雑になるわw

47 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:24:22.80 ]
Form2にはファイル選択とどの動作を行うかの選択のボタンやチェックボックスがついているため、Form2は必要になっています。
Invokeの使い方をまだよくわかっていなかったため使用を見送っていました。
メッセージループということは、Application.DoEvents()で良かったでしょうか。
Frameworkは4を想定していたので、それは使えませんね…

48 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:27:23.21 ]
>>46
じゃどうすんだよ?w

49 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:32:33.19 ]
>>48
ファイル読込ループにDoEvents()でも入れとけ。

50 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:33:24.62 ]
Windows7って標準で.Net4.0がインストールされていますか?



51 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:35:45.44 ]
>>47
invokeならこう
this.Invoke((MethodInvoker)delegate
{
this.Close();
});

DoEventsだとForm1の反応も悪くなる

52 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:40:37.43 ]
>>49
ファイル読み込みなんだからボトルネックはHDD。
だからスレッドなんて使わずDoEventsにしろ。

全く意味が分かりませんねぇ┐(´〜`)┌ ヤレヤレ

53 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:45:59.60 ]
>>52
コード書かない奴には理解できないよ。

54 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:53:57.93 ]
コード書いてるけど分からんわ

55 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:55:57.20 ]
ややこしそうだからスルーで

56 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:56:57.88 ]
同期考えないでスレッド生成しまくってるタイプか。
不定期にデッドロックしてもマイクロソフトだからですとか言いそう。

そういうプログラマを何人も見てきた。

57 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 20:59:43.16 ]
DoEventを素人にすすめる低能は死んでくれる?

58 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:01:07.44 ]
素人にマルチスレッド薦めるなw >>52 みたいなアホが大量生産されるw

59 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:08:14.51 ]
doeventsよりスレッドのほうがわかりやすいけど

60 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:10:44.86 ]
同期考えないからだろwww
過去にハイパースレッドとか出始めたときどんだけフリーズするアプリがあったんだよw



61 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:11:39.37 ]
どんだけあったの?w

62 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:16:14.72 ]
さすがに初心者にマルチスレッドはないな。
単独スレ立つぐらいなのに。CPUの知識は必須。

マルチスレッドプログラミング相談室 その9
toro.2ch.net/test/read.cgi/tech/1339691517/

63 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:19:14.81 ]
CPUの知識てw

64 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:19:16.44 ]
>>50
されてません
www.atmarkit.co.jp/ait/articles/1211/16/news093.html

65 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:19:34.58 ]
CPUの知識ワロタ。どうせおまえもCPUの知識なんてカスほどしかねーだろ

66 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:22:16.45 ]
原理から理解する必要があるって言ってた奴とかぶるものがあるなw

67 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:25:45.64 ]
原理主義者だな
テログラマーか?

68 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:26:09.72 ]
いくつ抽象化レイヤーをぶち抜いたらCPUの話になるんだよ

69 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:27:07.83 ]
>>63
落ち着け。初心者だと言ってるようなものだぞ。
さて、この勘違いした初心者をスルーすべきか相手にすべきかだな。


おれはパス。

70 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:35:59.33 ]
>>68
ほう。なぜこれが同期できてないかCPUレベルの話なしで初心者に説明してくれ。
これは典型的な初心者が書く馬鹿コードだから。既に稼動してるシステムで何度も見てきた。

Form1とかで
bool lock = false
int data = 0;

別スレッドで
if(!lock){
lock = true;
data処理
lock = false;
}



71 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:36:16.73 ]
確かにスレッド案はまだ停止用フラグの実装とかやる事あるけど、
今回は独立性高いし勉強用としては良いと思う。

72 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:40:44.40 ]
>>70
そもそも待機するコードになってないから

73 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:41:26.13 ]
釣りでなければ、どこにCPUレベルの話があるのかわからんが
もしかして、スレッドの話=CPUの話だとでも思ってるのか

74 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:44:41.35 ]
>>72
正しいコードプリーズ。

75 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:46:23.41 ]
volatileが必要とでも言いたいの?
そもそも説明を要求された理由が分からない

76 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:49:17.98 ]
このスレのあまりのレベルの低さに同情する。 >>70

77 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:50:50.87 ]
CPUの知識がどのレベルなのか分からないけど
レジスター、スタック、ヒープの構造と
各スレッドのコンテキストに割り当てられるリソースの
関係については知ってる必要があるし、それはCPUの
知識と言えるかもしれない

78 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:51:46.24 ]
ロックしたいなら>>70なソースは書くわけないし。どう見ても>>70=>>76だし。自演までレベル低くて同情するよ

79 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:52:06.95 ]
ロックってmonitor使うんじゃないの?騙された?

80 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:52:25.85 ]
>>78
正しいコードプリーズ。



81 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:53:11.43 ]
アセンブラのプログラマーの方ですか?
ここはC#スレですよ

82 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:55:25.45 ]
初心者ならそれこそBackgroundWorkerだろ
同期やロックはBackgroundWorkerイベントで
隠蔽されて安全に使える。

83 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:56:42.28 ]
精々lockやReaderWriterLockSlimで終わる話
なぜにCPUまで持ち出さないといけないのか

84 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:58:27.67 ]
初心者にはマルチスレッドは無理。

知ったかに説明しても逆ギレするだけ。

85 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:01:57.62 ]
>>80
ほらよ
ttp://codezine.jp/article/detail/139 の待機ハンドル

if(!lock)なんてやっても一瞬で素通り。while(1)かましたらずっと判定処理になるだろ
そんな糞コード書くなよ

86 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:04:47.30 ]
>>85
while(1)にしても同期できないよ、素人。

87 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:07:32.39 ]
while(true){
if(!lock){
lock = true;
data処理
lock = false;
}
}

これなら同期できると思ってる馬鹿がいる件について

88 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:09:01.24 ]
>>86
だからそんなの使わないって書いてるだろ。日本語ぐらい読めるようになれ

89 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:09:51.13 ]
>>70は会社員なのかなんなのかしらんが
既に稼動してるシステムでこのレベルのコードでマルチスレッド扱うプログラマがいるの?
ちょっといくらなんでも信じられん

90 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:12:23.64 ]
>>89
このスレで誰も答えを言えないのが答えさ。



91 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:19:01.08 ]
>>79,81,82,85に答えがあるのにそれを全部無視する>>70

92 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:19:19.66 ]
>>85は知ってるが>>70のコード断片から導くのは困難だわ
CPUのキャッシュとメモリの同期の話とかかと思いきや何だよ考えて損したw

93 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:20:29.15 ]
>>91
その中で一つでも同期できない理由を説明したものがあるのか。

ないじゃんwww

94 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:23:16.30 ]
素直にマルチスレッドなんにも分からないから教えてください、って言えよ

95 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:23:18.54 ]
>>93
>>72

96 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:24:51.14 ]
>>95
while(true){
if(!lock){
lock = true;
data処理
lock = false;
break;
}
}

これで同期できる?

97 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:25:32.79 ]
はい解散〜
解散解散〜

98 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:26:16.59 ]
>>96
それで同期出来るなんて誰も言ってないしw
もう引き下がってくれよw
めんどくせーよー

99 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:27:25.68 ]
>>96
できない>>85にあるだろ。こんなイメージ
while(true)
{
  manualEvent.WaitOne();
 //処理
}

100 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:27:30.81 ]
>>96
もちろんできない。
それ以前にその同期って言葉の使い方はちょとおかしい気が



101 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 22:28:55.09 ]
>>96
無理。動いたり動かなかったりデバッグ困難な糞コード。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<32KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef