1 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 17:44:56 ] 前スレ VB.NET質問スレ(Part30) pc12.2ch.net/test/read.cgi/tech/1242522019/l50 テンプレは>>2 〜
449 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:58:47 ] インターフェースが必要かデリゲートが必要かの違いだから面倒くささ度の観点からみれば対して変わらん。 インタフェースの方が実装の有無が他クラスから判断できるとか、使い回しができるとか、便利な面もある。 実際、AOPではインターフェースのそういった性質が多用されている。 同様にインターフェイス外すのも、デリケート外すのも俺的には面倒くささはいっしょ。特にC#とJavaでは。 VB.NETのは場合メソッド削除するだけだから幾分簡単に見えるが大した違いではない。あとIDEの自動化による 簡便性の違いは多少あると思う。
450 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:01:14 ] Javaは単一のactionPerformedで全部受けてifでイベントの発生源ごとに分岐するパターンが最悪 WndProcかよ
451 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:24:35 ] orz
452 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:49:19 ] >>449 デリゲートはあくまで委譲のための(処理をカプセル化するためといってもいい)しくみなんだし、 いわゆる一般的な意味でのインターフェイスに関して インターフェイスかデリゲートかっていうものではないでしょ。 javaだってイベントは普通委譲モデルで、ほとんどデリゲートとおんなじことやってるだけだし。 この使い方においてはインターフェイスもデリゲートも大した違いはない。 まあ専用のしくみであるデリゲートの方がよっぽど分かりやすいと俺は思うが。 .NETの言語だって、本来の意味でのインターフェイスの代わりに デリゲートを使うなんてことは普通はしない。 ただし、フォームのイベントなんかは、実質考え方自体がイベントなんだから、 自分自身のイベントもコントロールなんかと同じようにイベントハンドラでやっても 何らおかしいことはない。
453 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:59:22 ] 問題はIDEとの相性の悪さ JavaでIDEにイベントリスナを自動生成させたりするとものすごーく分かりづらいコードが出来上がる
454 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:13:13 ] DataBindingしてるソースの方を変更したとき、コントロールに同期させるには どうすればいいでしょうか? IPropertyChangedを実装する方法はわかったのですが、そういった準備なしに どこかのメソッドを呼び出す形で同期することはできないでしょうか?
455 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:58:40 ] ResetBindings
456 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 09:56:55 ] Form2からForm1のTextBox1.Textを設定できネーよなんとかしろ
457 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:07:58 ] >>456 するな、そんな阿呆なこと。 Form1 に、TextBox1.Text を取得/設定する Public なプロパティを定義するのが常套。
458 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:09:59 ] むしろVBだからこそ、そんな阿呆なことができるべき
459 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:11:00 ] VBだからどうでもいいよw Form1のデフォルトインスタンス使えばおk コントロールのアクセスレベルはデフォルトでinternalだからそのままアクセスできる
460 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:34:49 ] >>459 >デフォルトでinternalだから Friend じゃなくて?
461 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:40:35 ] ああC#とごっちゃになってた
462 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:52:15 ] >>458 規定のアクセスレベルがFriendなので同じプロジェクト内からは 出来てしまうアフォな仕様ですよ。 気に入らぬのでPrivateに変えてます。 C#だとPrivateなんだけどな。
463 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:24:08 ] 規定 ガイテイってよむの?
464 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:45:39 ] ttp://dictionary.goo.ne.jp/ ほれ
465 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:50:24 ] >>463 のりさだ (人名) です。
466 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 14:13:36 ] >>463 既定と間違うのはよくあること。 時々“規定クラス”と変換してしまうのは個人的によくあること。
467 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 19:12:43 ] >>463 ガイテイ 概定ってかくの?
468 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:53:43 ] オマエらどんな餌にでも食いつくんだなw
469 名前:デフォルトの名無しさん [2009/10/06(火) 14:35:51 ] 失礼します Convert.ToStringで、数値を16進数にし、さらに1桁の場合は頭に0をつけて文字数を揃えるのを一括して行う方法はあるのでしょうか? 現在は16進数の文字列にしたあと、文字数をチェックして1桁なら0をつけているのですが、書き方が汚くなってしまうので・・・。 すいませんがよろしくお願いします。
470 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 15:02:32 ] >>469 Convert.ToString(Int32, IFormatProvider) IFormatProviderとしてNumberFormatInfoを使う。 なんて面倒なことしないで、 string.Format("{0:X04}", 100) じゃ駄目?
471 名前:デフォルトの名無しさん [2009/10/06(火) 15:11:02 ] >>470 できました、ありがとうございます
472 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 16:50:49 ] むしろ100.ToStringで
473 名前:デフォルトの名無しさん [2009/10/06(火) 20:14:58 ] ("{0:X04}", 100) {0:X04}と100のイミは?
474 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:22:52 ] 前後をある文字で埋めるだけなら、String.PadLeftやPadRightもあるね。 >>473 複合書式指定文字列と書式設定するObject
475 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:39:12 ] うーむ・・
476 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:55:32 ] もとの質問は2ケタでいいらしいぞ 大昔のBASICちっくに Right$("0" & Hex$(数字),2)とかどうだ
477 名前:デフォルトの名無しさん [2009/10/08(木) 17:19:21 ] データグリッドビューでデータを表示させたとき 上の方をクリックすると勝手に列ごとにソートしてくれますが そのときのイベントを取得することってできますか? どうしたらよいかおしえてください
478 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:26:43 ] Sortedイベントとかあるけど
479 名前:デフォルトの名無しさん [2009/10/08(木) 19:29:40 ] >>469 i.ToString("X02")
480 名前:デフォルトの名無しさん [2009/10/08(木) 22:42:50 ] タイマの使い方がわかりません。以下のソースで試してみましたが、 Threading.Timerは時間通りに実行されず、他の2つは実行もされません。 Timers.TimerとWindows.Forms.Timerはデザイナの方で定義し、パラメータはデフォルトです。 イベントハンドラはすべてtimeout=trueとしているだけです。 どなたか教えてください。よろしくお願いします。 Dim timeout As Boolean Private Sub Button1_Click(略) Handles Button1.Click timeout = False Dim ThreadingTimer As Timer = New Timer( _ New TimerCallback(AddressOf ThreadingTimer_Tick), Nothing, 0, 1000) While timeout = False End While ThreadingTimer.Dispose() timeout = False TimersTimer.Interval = 3000 TimersTimer.AutoReset = False TimersTimer.Enabled = True While timeout = False End While TimersTimer.Dispose() timeout = False FormsTimer.Interval = 2000 FormsTimer.Enabled = True While timeout = False End While FormsTimer.Dispose() End Sub
481 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:51:51 ] 無限ループやめろ
482 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:19:11 ] 直接は関係ないけどDisposeの書き方が悪い Try-FinallyのFinallyの中でDisposeするか,Using文を使ってDisposeは書かない
483 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:23:45 ] まあ普通はタイマを一つのメソッド内でDisposeするなんてないだろうけどな
484 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:25:12 ] CPU目いっぱい使ってループしてんだから、 1コアだとかなり反応悪いだろうな。 2コア以上ならそれなりに動くかも知れないが。 で、デザイナではっつけてる方はそもそもUIスレッドでイベントが発生するしくみになってるから これじゃ動くわけがない。
485 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:30:18 ] 何でModule使ったら駄目なんですか?便利なのに Myとか最高
486 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:32:08 ] どこで何やってるかわからなくなるからだよ。 こんなこと言っても解らないだろうけど,クラスを使うのは余計なことを考えなくて済むようにするため。
487 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:43:04 ] どういう文脈か知らんが、 Module使ったらダメってのは Moduleを自分で作るな ってことじゃないのか?
488 名前:デフォルトの名無しさん [2009/10/09(金) 00:18:08 ] >>481-484 ありがとうございます。 原因がわかったのでなんとかできました。 タイムアウト付きの処理を行いたかったのですが、 Thread.Joinで希望する処理ができました。
489 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 10:26:07 ] >>485 便利なのは作った本人だけ
490 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 10:49:02 ] すべてのクラスはnewして使うべき
491 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:13:39 ] はあ?
492 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:25:50 ] ふぅ
493 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:27:10 ] 4次元ベクトルを作ろうと Public Class Vector4D(Of T) をつくり、この中で加算を定義するために T型 の変数同士の加算を使ったら定義されていないというエラーになりました。 このクラスはベクトルなので T型 の集合は加減乗除やべき乗に閉じていなければならないのですが、そのような制限をつけるために Of T 「As ...」 などで対応し、結果として T型 の変数同士の加算がエラーにならないようにすることはできますか? (練習用なのでこの方向で解決できるのかどうかをまず知りたいです。4次元固定のベクトルクラスが .NET Framework に存在するならば、さらにそれを教えていただけるとありがたいです。)
494 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:39:59 ] 演算部分はデリゲートなりインターフェイスなりに委譲するようにする
495 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:35:50 ] >>493 演算子 オーバーロード でぐぐれ
496 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:38:28 ] 演算子オーバーロードはジェネリックには使えないよー
497 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:14:03 ] Of T ってどんなイミが
498 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:46:21 ] >>496 2008で実験してみたが ジェネリックに使えなくはないけど、型ごとにオーバーロードしないとだめっぽい Public Shared Operator +(ByVal a As Vector4D(Of Integer), ByVal b As Vector4D(Of T)) As Vector4D(Of Integer)を定義 Public Shared Operator +(ByVal a As Vector4D(Of Double), ByVal b As Vector4D(Of T)) As Vector4D(Of Double)を定義 ...以下延々と必要な型に対して定義していく 使う方は楽かもしれんが、定義する方はジェネリックの利点がなくなるなぁ
499 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:58:13 ] 使う方にもデメリットがあるよ オーバーロードされていない型のVector4Dをまともに使うことができなくなる Vector4Dの外部から演算子オーバーロードを定義はできないから
500 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:42:46 ] そもそもベクトルをジェネリックにする意義がよくわかりません。 どういう意図なんだろ。よーわからん。
501 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 20:16:14 ] そこは疑問もつとこじゃないだろ。 あと今回問題なのは、Vector4Dの実装側で、 Tに対して算術演算が出来ないことなんだから、 演算子のオーバーロードは何の役にも立たん。
502 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 20:28:44 ] >>501 時々君みたいなこという人がいるけど、 そもそも必要性が疑わしいものの実現可能性を考えてなんの意味があるの? ベクトルをジェリックにして何の意味があるんだよ。 意味ないでしょ。
503 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 20:51:47 ] System.Linq.ExpressionとかDynamicMethodとか使えばできなくはないよ 算術演算を行うメソッドを動的に生成してしまえばいい
504 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:03:29 ] float,double,decimal,固定小数点数型辺りで使い回したいとか?
505 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:06:19 ] C++ではたいていベクトルはテンプレートになってるけど 実際doubleやfloat以外に使われてるのを見たことがない
506 名前:493 mailto:sage [2009/10/09(金) 22:23:58 ] 皆さん、レスありがとうございます。最初に DynamicMethod を勉強して >>503 を試してみることにしました。 >>494 もう少し具体的に書いていただけると助かります。 >>504 主な目的はその通りです。
507 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:28:27 ] DynamicMethodは無謀すぎる インラインアセンブラみたいなことするんだぞ 自分は.NETオタだと自負できるようになってから出直せ
508 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:56:46 ] 命令口調クンって馬鹿だな、まで読んだ。
509 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:05:40 ] やっぱりそもそもの発想がおかしいと思うけどねえ。 パフォーマンスが重要でないなら一番「大きな」型だけで演算を定義して あとの型はその型との相互の変換だけ考えればいいし、パフォーマンスが重要なら・・・ そもそも演算誤差の扱いっていう泥臭い問題の存在を忘れてないか
510 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:43:06 ] テンプレートみたいな何でもできるものをイメージしてたら、 Vectorをジェネリックに定義するのは何もおかしくない。 別に数値要素だけでしか使わないものではない。
511 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 12:07:29 ] ジェネリックデリゲート使って演算定義から取り出すやり方も出来ないことはないぜ。 そこまでする価値があるかは別問題として。 DynamicMethodよりは楽だけど。
512 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 12:08:17 ] あとどっちにしてもパフォーマンスは若干悪くなるな。
513 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 18:48:11 ] >>511 Int32等のCLI組み込み型については演算子がオーバーロードされてるわけじゃないから無理 DynamicMethodを使わないのであれば, Int32とInt32の足し算,Int32とByteの足し算,…みたいにすべてのケースに対する演算処理を 定義しておくしかない
514 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:50:23 ] ExpressionTreeを使えばこういう事も可能だが ttp://ufcpp.net/study/csharp/sm_genericop.html
515 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:52:22 ] それDynamicMethodで実装されてるんだけどな
516 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:52:44 ] サイトのソースデータをString変数に入れたら&という文字が&に置き換わっているのですが これを一括して元に戻すにはどのような方法で戻したら良いでしょうか? 他にも置き換わっているものがあると思うので&に限定したReplaceではない方法が あれば教えていただきたいです。
517 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:54:09 ] ↑ なんか消えてしまったみたいです。 &が& になってしまいます。(本当は半角)
518 名前:493 mailto:sage [2009/10/11(日) 00:55:17 ] DynamicMethod を使う方法と並行して、>>514 を試しています。 ufcpp.net/study/csharp/source/Operator.cs より、C# のコード public static readonly Func<T, T, T> Add = Lambda(Expression.Add); を VB にすると Public Shared Add As New Func(Of T, T, T)(AddressOf まではわかったのですが、この右に何をつければよいでしょうか?
519 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:57:25 ] >>517 HtmlEncode/HtmlDecode
520 名前:493 mailto:sage [2009/10/11(日) 00:58:02 ] >>516 HTMLの実体参照ですね。頻出のものは & ←→ & > ←→ > < ←→ < ですが www.ne.jp/asahi/minazuki/bakera/html/reference/charref などで一覧を見ることができます。
521 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:03:25 ] >>519-520 ありがとうございます。 おかげさまで無事対処できそうです。
522 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 02:24:22 ] 特殊な文字があるutf-8のwebページのソースをファイルに保存したいのですが WebClientでutf-8を指定してダウンロードしてStreamWriterで、書き込み時にutf-8を指定して 書き込んでいるのですが、保存されたテキストを見るとその文字が?になってしまっています。 teraPadというエンコードを指定できるテキストエディタでutf-8を指定して確認しているのですが 元の文字は消えてしまっているようです。 WebClientでダウンロードした直後にString変数に入れて、デバッグを一時停止して カーソルを当てるとその特殊文字は正常に表示できているのですが、 そのままConsole.WriteLineに出力すると?になってしまっています。 ブラウザのソース表示から直接TeraPadでソースを開いても?になってしまいます。 これはどのようにして保存したら正しく保存できるでしょうか? ちなみに文字は〜という文字の波を上下に反転したような形の文字です。 よろしくおねがいします。
523 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 04:19:54 ] 文字の確認はバイナリエディタでやった方が良い DownloadFileすればプログラム上でエンコーディング悩む必要もないけど?
524 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 05:27:02 ] コンソールとかエディタが使ってるフォントがその文字表示できないってオチじゃないだろうな
525 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 10:25:50 ] >>522 全角チルダの上下反転表示とくれば、 FullWidthTilda(U+FF5E) と WaveDash(U+301C) の変換問題だな。 TeraPadは内部コードがShift_JISらしいので、 WaveDashが化けてしまっているんじゃないかな。 一度、WikipediaのUnicodeの所を読んでみると良いよ。
526 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:02:18 ] >>518 Public Shared ReadOnly Add As Func(Of T, T, T) = Lambda(AddressOf Expression.Add) Public Shared Function Lambda(ByVal op As Binary) Return Expression.Lambda(Of Func(Of T, T))(op.Invoke(x)).Compile() End Function 試してないけどだいたいあってるはず Imports Binary = Func(Of ParameterExpression, ParameterExpression, BinaryExpression) を忘れずに
527 名前:526 mailto:sage [2009/10/11(日) 11:05:56 ] 訂正 Return Expression.Lambda(Of Func(Of T, T, T))(op.Invoke(x)).Compile()
528 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:43:33 ] 内部SJISのエディタでutf8開くなんて無謀すぎだ。
529 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:54:46 ] どちらかというと、今時内部SJISのエディタの存在自体が無謀な気もw
530 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:29:59 ] >>522 chcp 65001 hoge.exe >file
531 名前:522 [2009/10/11(日) 22:12:39 ] レスありがとうございます。 素直にメモ帳で開いたら正しく表示できました。 正しく保存できているのにteraPadで表示しようとあれこれやっていたんですね; 助かりました。
532 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:13:45 ] comboboxで選択された内容を配列に格納すんのってどうやんの? 簡単におせーて
533 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 08:08:19 ] SelectedItem
534 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:50:40 ] >>532 一つしか選択できないのに何故ゆえに配列?
535 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:01:01 ] なにゆえゆえ?
536 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 17:45:30 ] >>534 細けーこたぁいいんだ >>533 こいつをどうにかすればいいんだな?
537 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:00:52 ] いやまず君自身の頭の悪さをどうにかしないとダメだよ
538 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:56:07 ] 無茶ゆうな
539 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:37:04 ] 掲示板とかのメッセージみたいなツリー構造のデータをファイルに保存するのに良い方法があったら教えて
540 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:41:01 ] 2ちゃんみたいに、フラットにしちゃうのが楽。
541 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:11:49 ] >>539 JSON
542 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:23:05 ] >>539 尻洗いズ
543 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:24:34 ] >>537 オレもそう思う。
544 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:25:45 ] 羽山博いきてる?
545 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 14:41:09 ] すいません、 コンボボックスのドロップダウンをEnableをFalseにせずに 出ないようにしたいんですが、これってvb.netじゃできないもんでしょうか?
546 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:20:06 ] For I = 1 To 1000 System.Threading.Thread.Sleep(1) Application.DoEvent Next これで約1秒待機しているのですが以前は大体1秒、2秒だったのですが 最近はすごい長くなってきました。 10000でも10秒位だったのですが、1分近くかかるようになりました。 これはどういう部分に原因がありそうでしょうか? そういえばパソコンの動作も鈍い感じがします。 CPUやメモリには全然余裕がある状態でも同じです。
547 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:00:29 ] そういうコードを書かない、でいいじゃないか
548 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:27:24 ] >>546 お前はあほか
549 名前:526 mailto:sage [2009/10/13(火) 20:28:24 ] UIスレッドでSleepはご法度