C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■1712  Re[1]: WebClientインスタンスのプーリングについて
□投稿者/ 渋木宏明(ひどり) -(2007/03/03(Sat) 21:42:15)
>
    No1704 (Hirotow さん) に返信
    > 同時にひとつしかダウンロードを行えない

    WebClient.DownloadXXXAsync() を使えば、同時並行に複数のダウンロードを実行することが出来ます。
記事No.1704 のレス /過去ログ10より / 関連記事表示
削除チェック/

■9035  Re[3]: リストボックスの全アイテムをテーブルと差分を取り更新
□投稿者/ Jitta on the way -(2007/10/17(Wed) 07:22:46)
    うーん、そう思うから、なのか...

    DataSetは、簡易データベースと考えてください。簡易データベースに対して行った変更は、そのままバックエンドのデータベースに対して行われます。

    とりあえず、ADO.NETについて調べてみてください。MSDN ライブラリにも、「ADO.NET での開発」のようなトピックがあります。
記事No.8996 のレス /過去ログ21より / 関連記事表示
削除チェック/

■9036  Re[2]: HRESULT からの例外 0x8007007E
□投稿者/ カエデ -(2007/10/17(Wed) 07:29:34)
    mあさん、よねKENさん、ありがとうございます。

    過去ログに書いてあった
    >>そのDLLが必要とする別のDLLが実行環境に存在しないんじゃないでしょうか
    については、調べたのですが、特に他に必要なDLLはありませんでした。

    と、思っていたのですが、
    >>C++のDLL内部で使っているMFCがあれば、それらが参照しているDLLも見えてないとまずい
    と、いうことだったんですね。
    要約ありがとうございます。

    本日試したいと思います。
記事No.9023 のレス /過去ログ22より / 関連記事表示
削除チェック/

■92573  Re[1]: rgbによるbackcolorの表示
□投稿者/ 魔界の仮面弁士 -(2019/10/08(Tue) 15:40:33)
    No92572 (C#初心者 さん) に返信
    > C#でのアプリケーション作成でtextboxのBackColorを

    背景色だけでなく、文字色も考慮した方がよいかと。


    > グラデーション形式で黒から白、白から黒に変更するものを作成したいのですが、途中の表示がうまくいきません。

    画面描画は「イベント処理を抜けた後」のアイドル時に行われるためです。
    処理中(ビジー状態)は直ちに反映されません。


    100 ミリ秒ごとに背景色を変えたいのであれば、ループ処理で実行するのではなく、
    Timer を画面に貼り、Interval を 100ミリ秒程度にした上で、
    Tick イベントが発生するたびに、BackColor を変更するようにしてみてください。


    > Thread.Sleep(100);

    画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
    また、Click イベントに長時間(数秒以上)の長い処理を行わせるのも避けましょう。
記事No.92572 のレス /過去ログ160より / 関連記事表示
削除チェック/

■92577  Re[2]: rgbによるbackcolorの表示
□投稿者/ 大谷刑部 -(2019/10/08(Tue) 16:35:24)
    No92573 (魔界の仮面弁士 さん) に返信
    > ■No92572 (C#初心者 さん) に返信
    >>グラデーション形式で黒から白、白から黒に変更するものを作成したいのですが、途中の表示がうまくいきません。
    >
    > 画面描画は「イベント処理を抜けた後」のアイドル時に行われるためです。
    > 処理中(ビジー状態)は直ちに反映されません。
    なので、sleepとプロパティーの設定だけだと肉眼で確認する前に次の色に変わっているという現象になっていると想像されます。

    > 100 ミリ秒ごとに背景色を変えたいのであれば、ループ処理で実行するのではなく、
    > Timer を画面に貼り、Interval を 100ミリ秒程度にした上で、
    > Tick イベントが発生するたびに、BackColor を変更するようにしてみてください。
    こっちのやり方の方が結果的に書くコードはシンプルになるのかもしれませんね。
    ただまあ、この程度の処理(白⇔黒)であれば、メモリ負荷とかにそれほどクリティカルな影響はないのforループでもいいんじゃないでしょうか?
    3原色分全部ループ(255の3重ループ)とかなら明らかにやめた方がいいとは思いますが。

    >>Thread.Sleep(100);
    >
    > 画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
    win7 32bitの環境で試した(refleshで肉眼確認)限りでは、
    1000MS(1秒)では変化は細かいが若干間延びしてイライラする、10MSだと変化が速すぎてわかりずらい感じを受けるので
    どういう手段をとるかは別として間隔は100MSで妥当な気はします。
    ただし、マシンスペック、OSが32bitか64bitで見える印象は結構変わると思いますので、質問者さん自身で試して妥当な線を決めた方がいいと思います。

    > また、Click イベントに長時間(数秒以上)の長い処理を行わせるのも避けましょう。
    クリックイベントならそこまでクリティカルに考えなくてもよいような(あくまで主観ですが)
    Form_Load、XX_Activateなど画面全体の描画に絡むイベントでは絶対やらない方がいいですね。
    グリッドにデータ反映とかでも行数多すぎるとたまに描画に絡むエラーになったりしますからね。




記事No.92572 のレス /過去ログ160より / 関連記事表示
削除チェック/

■92575  Re[2]: rgbによるbackcolorの表示
□投稿者/ C#初心者 -(2019/10/08(Tue) 16:24:14)
    No92573 (魔界の仮面弁士 さん) に返信
    > ■No92572 (C#初心者 さん) に返信
    >>C#でのアプリケーション作成でtextboxのBackColorを
    >
    > 背景色だけでなく、文字色も考慮した方がよいかと。
    >
    >
    >>グラデーション形式で黒から白、白から黒に変更するものを作成したいのですが、途中の表示がうまくいきません。
    >
    > 画面描画は「イベント処理を抜けた後」のアイドル時に行われるためです。
    > 処理中(ビジー状態)は直ちに反映されません。
    >
    >
    > 100 ミリ秒ごとに背景色を変えたいのであれば、ループ処理で実行するのではなく、
    > Timer を画面に貼り、Interval を 100ミリ秒程度にした上で、
    > Tick イベントが発生するたびに、BackColor を変更するようにしてみてください。
    >
    >
    >>Thread.Sleep(100);
    >
    > 画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
    > また、Click イベントに長時間(数秒以上)の長い処理を行わせるのも避けましょう。


    ご返信ありがとうございます。
    先ほどtimerを使用したやり方を試したところ無事に表示することができました。

    迅速に回答いただき本当にありがとうございます。
記事No.92572 のレス /過去ログ160より / 関連記事表示
削除チェック/

■92593  Re[3]: rgbによるbackcolorの表示
□投稿者/ 魔界の仮面弁士 -(2019/10/09(Wed) 12:04:12)
    2019/10/09(Wed) 16:47:18 編集(投稿者)

    No92584 (大谷刑部 さん) に返信
    > 問題はおっしゃるような厳密性がこのケースで必要かどうかです。
    > 質問者もタイマーイベントで解決とおっしゃっているので、

    理屈までいきなり説明しても追いきれないでしょうし、初心者向けには、
    『Form 上で Sleep を呼んではいけない』と伝えるようにしています。
    >>> 画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。

    この原則を守ることで問題になることは無いと思いますよ。


    そのための代替案としては、
    案1: Thread.Sleep(t) の代わりに await Task.Delay(t) を使ってもらう
    案2: ループ処理を分割して、Timer でのイベント呼び出しに置き換えてもらう
    案3: Sleep 処理を BackgroundWorker 内に押し込んで、BeginInvoke で BackColor を変更させる
    などが思い当たります。
    No92573 の提案は案2 でしたが No92578 で案1 にも少しだけ言及しています。


    === 以下蛇足 ===

    >>背景色が実際に変わるのは、
    >>イベントを抜けた後(のアイドル時)になります。
    > そんなことはないでしょう、refleshで見た目は変わりましたよ。

    大文字小文字もスペルも間違っているようですが、それはさておき。

    メッセージさえ処理されればよいので、Application.DoEvents(); や
    textBox1.Update(); や textBox1.Refresh(); などを呼び出せば、
    イベントを抜ける前であっても再描画処理が行われます。

    それが先の回答の
    >> Click イベントの最中に強制的に再描画させたいのであれば、
    >> BackColor の変更後に Update メソッドを呼ぶなどの処置が必要です。
    という箇所に当たります。この点については、Sleep を呼んでいるかどうかは影響しません。


    一方、元質問者である C#初心者 さんのコードでは、Refresh や Update 等の
    呼び出しが行われていたわけではありませんので、
    >> イベントを抜けた後(のアイドル時)になります。
    という説明にさせていただきました。


    実際に、先の実験コードを使って確認してもいますが、
    イベント脱出後でないと WndProc が処理されないことを確認しています。
    ループ中で Update や Refresh した場合は、即時処理されるのですけれどね。

    Refresh は Invalidate + Update を呼び出したのと同義となりますが、
    今回のケースでは、BackColor の変更が発生しているわけなので、
    Update だけでも事足りると思います。

    とはいえ、Update や Refresh によって処理されるメッセージは描画関係に限定されます。

    Label ならまだしも、今回の対象は TextBox ですから、
    その他の処理(ユーザー入力等)も阻害されてしまうのはまずいので、
    どちらにせよ Sleep の出番は無さそうです。


    > 人の感覚次第かもしれませんが、質問者さんは色の移り変わりを見たいのでしょ?
    > であれば25秒はさほど長いとは思いません。
    > 仮に、お客さんに納品するPGとしても、そうそう、数秒でイラつくお客さんばっかりじゃないでしょう。

    何か長い処理をしている間、次の処理が行えないとか、
    砂時計カーソルになるとか、キャンセルできないといった話をしているなら、
    それは別に構わないと思います。(それは単にアプリの仕様というだけの話)

    背景色が変化していくアニメーション効果として、
    25 秒間かけて変化させることもまったく問題ありません。問題なのは
    25 秒間応答不能になってしまう点のみであり、「長い処理の間」も
    メッセージループを回すような仕組みにさえなっていれば OK です。

    (たとえば HWND_BROADCAST 向けのメッセージを止めてしまうと、
     自アプリは良くても、他アプリに迷惑がかかります)
記事No.92572 のレス / END /過去ログ160より / 関連記事表示
削除チェック/

■97986  メッセージボックスの位置を設定する
□投稿者/ サーファー -(2021/08/18(Wed) 12:29:35)

    分類:[.NET 全般] 

    VB.NETを使用しております。

    メッセージボックスの位置をウインドウの中央にしたいと考えています。

    ' https://qiita.com/Apeworks/items/263645a599f3ed73567e
    ' https://www.ipentec.com/document/csharp-show-message-box-in-center-of-owner-window

    この辺りのコードを参考にして、
    うまくウインドウ中心に表示させることはできました。


    しかし、毎回ではなく、まれにですが、

    CallbackOnCollectedDelegate が発生しました。
    Message: マネージ デバッグ アシスタント 'CallbackOnCollectedDelegate' が 'D:\xxx.exe' で問題を検出しました。
    追加情報:コールバックが、型 'xxx.MsgBoxSetPosition+Win32Native+HOOKPROC::Invoke' のガベージ コレクションされたデリゲートで行われました。これは、アプリケーションのクラッシュ、破損、およびデータの損失を発生させる可能性があります。デリゲートをアンマネージ コードに渡すとき、デリゲートは 2 度と呼び出されないことが確実になるまでマネージ アプリケーションによって維持されなければなりません。



    というエラーが発生し、プログラムがクラッシュしてしまいます。


    大体、プログラム起動後の一回目のメッセージボックスの表示でエラーが出ます。



    http://answersweb.azurewebsites.net/MVC/Post/Thread/0c25dc53-b137-4146-88cf-61869670a128?category=csharpgeneralja

    このページなどによると
    GCによりProcが破棄されてしまうことが原因、というようなことが書かれてあります。


    どのようにすれば、エラーが出ないようにできますか?






親記事 /過去ログ170より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -