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

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

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

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>
■4139  GataGridViewで新規行を表示しない
□投稿者/ ratte -(2007/06/07(Thu) 17:56:05)

    分類:[VB.NET (Windows)] 

    Windows XP
    VB.NET2005

    お世話になります.

    Windowsアプリを作っています.
    DataGridViewにデータを表示させたいのですが,データが入っていない新しい行(インデックスが*)を表示したくありません.
    DataGridViewのReadOnlyプロパティをTrueにする,ということをやってみたのですが表示されたままです.

    コードは以下の様に書いてます.
    -----------------------------------------------------------------
    Dim vDataTable As New DataTable
    Dim vDtRow As DataRow

    '列定義
    vDataTable.Columns.Add("列A")
    vDataTable.Columns.Add("列B")

    '新規行作成
    vDtRow = vDataTable.NewRow

    'セルの内容
    vDtRow.Item(0) = ("10000)
    vDtRow.Item(1) = ("あいうえお")

    '行追加
    vDataTable.Rows.Add(vDtRow)

    'DataGridViewにデータをセット
    DataGridView1.DataSource = vDataTable

    '新規行を表示しない
    DataGridView1.ReadOnly = True

    -----------------------------------------------------------------

    ReadOnlyを使うことが見当はずれなのでしょうか?
    ご存知の方がいらっしゃいましたらご教授ください.
    宜しくお願い致します.
親記事 /過去ログ13より / 関連記事表示
削除チェック/

■5346  PropertyGridでの入力チェック
□投稿者/ kome -(2007/07/11(Wed) 11:26:45)

    分類:[C#] 

    はじめまして。
    いつも、こちらのサイトを参考に勉強させて頂いてます。

    今回、PropertyGridについてお聞きしたいことがあります。

    PropertyWindowでデータ(int,stringなど)の入力値に制限を
    設けて、制限値を越えたら、自作のエラー処理を行うようにしたいと
    考えております。
    しかし、無効な入力値の場合PropertyValueChangedのイベントが発生せず、
    内部で勝手に例外処理(エラーのダイアログ)を行っているようです。
    (ダイアログのメッセージ内容「プロパティの値が無効です。」)


    無効な入力値
    ・int型のGridItemに文字を入力する(12a34...)
    ・int型のGridItemにintで扱えない値を入力する(1000000000000000000000...)


    この例外の発生をキャッチして独自のエラー処理に変えたいのですが、
    例外の取得方法がわかりません。

    もし、どなたか解決策をご存知の方が居りましたら、
    ご教授をお願い致します。


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

■6457  Re[5]: DataGridViewのスクロールバーの表示がおかしい
□投稿者/ のぶ -(2007/08/14(Tue) 10:41:00)
    うよさん

    結局、解決策は見つけられたのでしょうか?
    私はC#の環境なのですが、しばらく前に同様の現象が発生したことがあります。

    ・DataGridViewを使う
    ・スクロールバーはDataGridViewのもの
    ・中身はバインドではなく、コード内で手動で追加(約10000件)

    の条件で、中身の追加を別スレッドで行っていると発生し、
    中身の追加をメインのスレッドで行うようにすると発生しなくなりました。
    その時に調べた範囲では、データそのものは正しく入っているものの、
    表示用の列数が少なくなり、その領域にPageDown等でアクセスすると、
    「範囲外」という例外が発生していました。

    とりあえず、内部で使うツールだったので、別スレッドで読み込むことを
    諦めて逃げていたのですが、試しに、うよさんの以下のコードを追加してみたところ、
    表示されるようになりました。
    > .VirtualMode = True
    > .VirtualMode = False

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

■6863  Re[1]: Control.Invokeが使えない件。
□投稿者/ れい -(2007/08/25(Sat) 09:25:40)
    2007/08/25(Sat) 09:33:09 編集(投稿者)

    FIX: A Windows Forms-based application may stop responding when you make a call to the Control.Invoke method in the .NET Framework 1.1 SP1
    http://support.microsoft.com/kb/896665/en-us

    このパッチの有無によるフリーズの程度、および.Net2.0との比較を行いました。

    テストコードはhttp://bbs.wankuma.com/index.cgi?mode=al2&namber=6760の改造で詳細は後述。
    Formを何回閉じたらフリーズするか、
    環境ごとに5回ほど繰り返して測定しました。

    他のソフトはきにせず動かしていました。(VisualStudioとかIISとかいろいろ。)

    ログイン環境 CPU OS Framework パッチ有無 停止頻度

    RDP HyperThread 2003 Net1.1 無し 100%
    VPC ? XP Net1.1 無し 1/2〜1/5

    RDP SingleProcessor 2003 Net1.1 有り 1/10〜1/50
    RDP 2xXeon 2003 Net1.1 有り 1/3〜1/10
    RDP HyperThread 2003 Net1.1 有り 1/3〜1/20

    RDP SingleProcessor 2003 Net2.0 - <1/10000
    RDP HyperThread 2003 Net2.0 - 1/100〜1/500
    RDP 2xXeon 2003 Net2.0 - 1/100〜1/500
    Console CoreDuo Vista Net2.0 - 1/500〜1/10000
    VPC ? XP Net2.0 - 1/10000


    RDP= Remote Desktop
    VPC= Virtual PC

    まとめ。

    KB896665のFixを当てないとNet1.1ではInvokeは全然使えません。
    当てても、Net1.1ではInvokeが止まることがかなりあります。
    .Net2.0ではあまり止まりませんでしたが、
    無視できるレベルではありませんでした。

    フリーズした際、該当プロセスのCPU使用率はほぼ0でした
    一度にたくさん起動したり、負荷が重いと止まる確率が上がるような気がします。
    プロセッサの数が増えると止まる確率が上がる気がします。

    BeginInvokeは殆ど試してませんが、
    .Net1.1でも2.0でも、10000回程度では止まりませんでした。

    感想。

    やっぱり、Control.Invokeは私には使えそうにないです…。
    1/500で止まるのは見過ごせないし、
    どう同期組んでいいのかわからなすぎる。
記事No.6843 のレス /過去ログ18より / 関連記事表示
削除チェック/

■6945  Re[7]: Control.Invokeが使えない件。
□投稿者/ れい -(2007/08/27(Mon) 19:52:01)
    2007/08/27(Mon) 20:14:08 編集(投稿者)

    No6921 (えムナウ さん) に返信
    > >残念ながら、これでは止まる可能性があります。
    > >とくにマルチプロセッサ、マルチスレッドプロセッサや負荷の高い状況では
    > >止まる場合が考えられます。
    > とりあえず私の環境の場合1000回以内に止まっていたものが、
    > 夜通し動かしても止まらなかったのはご報告しておきます。
    > 環境により違いはあると思いますが試してみたらどうでしょうか?

    はい。
    試してから回答しました。
    詳しく調べてなかったので、ちょっとごまかした表現をしましたが、
    closingやcloseのフラグは私も初期に試した方法で、
    これでダメで困っていました。

    私の環境、Windows Server 2003 2xXeonでは
    .Net2.0では10000回に1回程度、
    .Net1.1では1000回程度で停止しました。
    とくに.Net2.0では実用上問題ないと言えなくもないですが。

    > それならばformCloseチェックとform_Closingイベント処理中でロックかけたらどうでしょうか?
    > フォームがクローズされた後でNotingにクリアされる前にInvokeされることが原因だと思いますので。

    チェックを2重にかけてもあまり関係ありませんでした。
    少なくなったような気がしなくもないですが、
    統計的に有意であると言えるほどまだ試行できていません。
    1週間後くらいにはわかるかと…。

    追記。
    読み違えてました。フラグではなくロックですね。
    ロックをかけるとは、具体的にはなにをどうロックするんでしょうか?
    私には具体的内容が想起できませんでした。
記事No.6843 のレス /過去ログ18より / 関連記事表示
削除チェック/

■7139  Re[17]: Control.Invokeが使えない件。
□投稿者/ れい -(2007/08/30(Thu) 16:32:02)
    No7014 (れい)
    > 今Nyaruruさんの解析結果を考慮して、
    > ShowDialog終了後に同期機構を入れてみて試してます。
    >
    > 差し戻しは実装がめんどくさいですが、
    > 時間をみつけてやってみます。
    >
    > BeginInvokeなら安心かと思っていたんですが、
    > 散々しらべたところBeginInvokeでもたまに死ぬことがわかりました。
    > フリーズはしないですが。

    えーと。
    回しまくって調べてみました。
    そろそろかわいそうなのと、バレるとやばいので、もうやめることにします。

    ・Invokeなし(Control)
     PostMessageとInterlockedで親と通信。画面描画などは同程度に行う。
    1,000,000を超えましたが、動いてます。

    ・BeginInvoke
     InvokeでなくBeginInvokeだけ。
    フリーズはありません。
    Invoke先スレッドが再現性ない例外を吐きます。
    300回程度回ります。

    ・ShowDialog後に同期機構を入れる
     Invokeが終わるまでスレッドが死なないようにした。
    フリーズします。
    Invoke先スレッドは再現性ない例外をを吐きます。
    10,000ループ程度でした。

    ・Closingで一回戻る。
     Closingで戻ってInvokeを禁止し、全てのInvokeが終了するまで待ち、それから再度Closeしてみました。
    Invoke先スレッドが2回ほど例外を投げて異常終了しました。原因は不明です。
    フリーズはありません。
    100,000回程度は回りました。

    ※怖いのでハードウェアのエラー検査も行いましたが、問題は見つかりませんでした。
    ※停止頻度が低いので、全て数回しか試していません。つまり、数字は統計学的に有意ではありません
    ※テストはすべて2xXeonで、4Threadな環境です。
    ※.Net1.1、.Net2.0に違いはありませんでした。

    テスト結果は以上です。

    考察

    残念ながら、「BeginInvoke」も「ShowDialog終えてから待つ」も「Closing差し戻し」もダメでした。

    Invoke先スレッドがごく稀に例外吐きます。
    PostMessageやWM_TIMER、同期オブジェクトを組み合わせて、自分で実装すると問題なく動きます。

    BeginInvokeでもInvokeと同様にInvoke先が例外を吐いて異常終了します。
    いろいろな掲示板にInvokeではなくBeginInvokeを使えと書いてありますが、
    Invoke先が死ぬ確率は同程度で、停止を回避できるだけです。

    いつ閉じられるかわからないFormにInvokeすると、
    停止や異常終了を引き起こす場合があるのは回避不可能でした。

    結論

    フォームを自動で開いたり閉じたりするプログラムで、
    且つInvoke・BeginInvokeで非同期通信すると、
    10000回ぐらいで停止したり死んだりするので、
    よくないよ。

    それ以前にそんなのはUIとして大失敗ですよ。
記事No.6843 のレス / END /過去ログ18より / 関連記事表示
削除チェック/

■7154  Re[16]: Long型の乱数を生成する自作クラスをつくりたい
□投稿者/ 魔界の仮面弁士 -(2007/08/30(Thu) 23:21:57)
    2007/08/30(Thu) 23:33:16 編集(投稿者)

    No7124 (れい さん) に返信
    >> Dim b() As Byte = BitConverter.GetBytes(0UL)
    > これは、魔界の仮面弁士さんのポリシーでしょうか?

    私も、普段は使いません。(^^;
    サンプルですので、可読性を優先させたが故の結果です。

    # かえって分かりにくいという人もいるでしょうから、
    # 可読性というと語弊があるかも知れませんけれども。


    > Dim b(8) As Byteでは遅いのかな?
    > この心を是非教えてください。

    そういった間違いを防ぐ目的もあります。8 ではないですよね。


    =======

    で。昔からの VB 使いとしては、いにしえの「Rnd 関数」時代に使われていた
      randomvalue = CInt(Int((upperbound - lowerbound + 1) * Rnd() + lowerbound))
    の方式を用いて、こんなのとか。速度面は度外視。



    Public Class LongRandom

    Private _Random As New System.Random()

    Public Function [Next](ByVal min As Long, ByVal max As Long) As Long
    If min = max Then Return min
    If min > max Then Throw New ArgumentOutOfRangeException()

    Dim dMin As Decimal = CDec(min)
    Dim dMax As Decimal = CDec(max)
    Dim dRnd As Decimal = Sample()

    '標準の Next 仕様:「Min以上 Max 未満」
    Return CLng(Int(dMin + dRnd * (dMax - dMin)))

    '「Min以上 Max 以下」ならこっち
    'Return CLng(Int(dMin + dRnd * (dMax - dMin + 1D)))
    End Function

    Private Function Sample() As Decimal
    Dim iHi As Integer = _Random.Next(0, 1000000000)
    Dim iLo As Integer = _Random.Next(0, 1000000000)
    Dim s As String = String.Format("0.{0:000000000}{1:000000000}", iHi, iLo)

    ' 0以上1未満の値を返す
    Return Decimal.Parse(s)
    End Function
    End Class
記事No.6994 のレス /過去ログ18より / 関連記事表示
削除チェック/

■7197  Re[17]: Long型の乱数を生成する自作クラスをつくりたい
□投稿者/ れい -(2007/08/31(Fri) 17:40:54)
    2007/08/31(Fri) 17:41:52 編集(投稿者)

    No7154 (魔界の仮面弁士 さん) に返信
    > ■No7124 (れい さん) に返信
    > >> Dim b() As Byte = BitConverter.GetBytes(0UL)
    >>これは、魔界の仮面弁士さんのポリシーでしょうか?
    >
    > 私も、普段は使いません。(^^;
    > サンプルですので、可読性を優先させたが故の結果です。
    >>Dim b(8) As Byteでは遅いのかな?
    >>この心を是非教えてください。
    >
    > そういった間違いを防ぐ目的もあります。8 ではないですよね。

    おぉ。
    VBはここで7なんでした。
    やはりVBは難しい。
    C++から脳内変換で頑張るのはいい加減無理があるなぁ。

    > '標準の Next 仕様:「Min以上 Max 未満」
    > Return CLng(Int(dMin + dRnd * (dMax - dMin)))
    >
    > '「Min以上 Max 以下」ならこっち
    > 'Return CLng(Int(dMin + dRnd * (dMax - dMin + 1D)))

    そうそう。
    忘れてましたが、私も最初違和感を感じてました。
    普通は「未満」ですよね。
    でないと変換がめんどくさい。

    > Dim iHi As Integer = _Random.Next(0, 1000000000)
    > Dim iLo As Integer = _Random.Next(0, 1000000000)
    > Dim s As String = String.Format("0.{0:000000000}{1:000000000}", iHi, iLo)

    小数点以下18桁の精度で、0以上1未満のDecimalを作っています。
    一方、Long型は約19桁の整数です。
    ですので、

    > Return CLng(Int(dMin + dRnd * (dMax - dMin)))

    この変換で精度が足りていません。
    これでは乱数として得られないLong型が出てきてしまいます。
    最低でも後二桁必要です。
記事No.6994 のレス / END /過去ログ18より / 関連記事表示
削除チェック/

■6130  時計回り、反時計回り判定
□投稿者/ セイン -(2007/08/01(Wed) 18:29:26)
>

    分類:[C/C++] 

    以前はお世話になりました。
    時計回り、反時計回りの判定方法として、下記サイトの一番上に書いてある行列の計算から求めてみましたが、
    特定の条件時は、当てはまらないようです。
    http://web2.incl.ne.jp/yaoki/arl.htm

    私が書いたソース
    vertexs は、3点座標が格納されたベクターの配列です。

    /*------------------------------------------------------------------*/
    /** 時計回りチェック
    * @return
    * CLOCK_WISE 0 //Clock-Wise :時計回り
    * COUNTER_CLOCK_WISE 1 //Counter Clock-Wise : 反時計回り
    */
    /*------------------------------------------------------------------*/
    int CGLDraw::ClockWiseCheck
    (
    vertexs vertexsList ///< [i]座標列情報
    )
    {
    /*
    |vertex[0]x vertex[1]x| |vertex[1]x vertex[2]x| |vertex[n]x vertex[0]x|
    | |+| |…| |=A
    |vertex[0]y vertex[1]y| |vertex[1]y vertex[2]y| |vertex[n]y vertex[0]y|
    Aの値<時計回り
    Aの値<反時計回り
    Aの値<同一直線
    */

    double sum = 0; ///< 合計値 sum<0 時計回り sum>0 反時計回り
    for(DWORD i=0; i<vertexsList.size(); ++i) {
    if(i != vertexsList.size()-1) {
    sum += ((vertexsList[i].x * vertexsList[i+1].y)-(vertexsList[i+1].x * vertexsList[i].y))/10000.0;
    }
    else {
    sum += ((vertexsList[i].x * vertexsList[0].y)-(vertexsList[0].x * vertexsList[i].y))/10000.0;
    }
    }

    if(sum>0) { return COUNTER_CLOCK_WISE;}
    else if(sum<0) { return CLOCK_WISE;}
    else { return NO_CLOCK_WISE;}
    }



    上記の式で判定すると、逆周りと判定されてしまう座標列。
    [0] {x=169.90084838867187 y=206.44012451171875}
    [1] {x=169.90084838867187 y=204.56155395507812}
    [2] {x=261.70086669921875 y=204.56155395507812}
    [3] {x=261.70086669921875 y=206.44012451171875}
    [4] {x=261.75085449218750 y=206.40176391601562}
    [5] {x=261.80084228515625 y=206.38104248046875}
    [6] {x=261.80084228515625 y=110.74208068847656}
    [7] {x=261.80084228515625 y=110.74208068847656}
    [8] {x=261.75085449218750 y=110.72137451171875}
    [9] {x=261.70086669921875 y=110.68299865722656}
    [10] {x=261.70086669921875 y=112.56156921386719}
    [11] {x=169.90084838867187 y=112.56156921386719}
    [12] {x=169.90084838867187 y=110.68299865722656}
    [13] {x=169.85086059570312 y=110.72137451171875}
    [14] {x=169.80084228515625 y=110.74208068847656}
    [15] {x=169.80084228515625 y=206.38104248046875}
    [16] {x=169.85086059570312 y=206.40176391601562}
    [17] {x=169.90084838867187 y=206.44012451171875}


    どなたかヒントを教えてください。
親記事 /過去ログ18より / 関連記事表示
削除チェック/

■6269  Re[3]: 時計回り、反時計回り判定
□投稿者/ セイン -(2007/08/07(Tue) 11:25:06)
    >y4yama さんへ

    わざわざコードまで書いていただきありがとうございます。
    C++で書いた僕の式でも同じ値-8464.73637が出ましたのですっきりしました。

    ちなみに僕のコードで/10000.0 と割る数字が2.0でない理由は、
    大きな円を0.1度刻みぐらいにした座標を受けたとき、
    Dim sum As Double = 0.0
    の最大値をオーバーしてしまうことがあるためです。

    自分で作っていたにもかかわらず、これが面積をあらわすことを忘れていました。ありがとうございます。
    現状のままでやってみますが、問題がありそうでしたら、ぜひ教えてください。
記事No.6130 のレス / END /過去ログ18より / 関連記事表示
削除チェック/

■7669  Re[6]: ドライブ情報取得アプリを他のパソコンに移すとエラーが出る
□投稿者/ 中野美奈子大好き -(2007/09/12(Wed) 20:48:29)
    はつね様,ありがとうございました。
    お聞きして良かったです。
    
    
    以下のとおりで,上手くいきました。
    メッセージボックスに,dInfo.Nameを引っ張ってくれば,どのドライブが準備できていないかも表示できました。
    −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                listBox1.Items.Clear();
                listBox1.Items.Add("DRIVE\t\tREADY?\t\tTYPE\t\tFREESPACE\t\tTOTALSPACE\t\tFORMAT");
                listBox1.Items.Add("-------------------------------------------------------------------------------------------------------------------");
    
                foreach (System.IO.DriveInfo dInfo
                    in System.IO.DriveInfo.GetDrives())
                {
                    try
                    {
                    double ts = Math.Round((double) dInfo.TotalSize / 1000000, 2);
                    double tfs = Math.Round((double)dInfo.TotalFreeSpace / 1000000, 2);
                        listBox1.Items.Add
                            (
                            dInfo.Name + "\t\t"
                            + dInfo.IsReady + "\t\t"
                            + dInfo.DriveType.ToString() + "\t\t"
                            + tfs.ToString() + "MB \t\t"
                            + ts.ToString() + "MB \t\t"
                            + dInfo.DriveFormat.ToString()
                            );
                    }
                    catch (Exception)
                    {
                        MessageBox.Show(dInfo.Name + "ドライブの準備ができていません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
    
                }
            }
        }
    }
記事No.7632 のレス /過去ログ19より / 関連記事表示
削除チェック/

■8060  DLL Import を使用して、引数の返却値をとりたい。
□投稿者/ K.K -(2007/09/21(Fri) 18:28:16)

    分類:[C#] 

    2007/09/21(Fri) 18:29:01 編集(投稿者)
    2007/09/21(Fri) 18:28:57 編集(投稿者)

    こんにちわ。
    DLL Import を使用して、文字列の受け渡しをしたいと思っています。
    ソースはこんな感じです。

    DLL側
    extern "C" char PASCAL EXPORT DataRead(char *AllData[] , char *AllDataChar){
    (中略)
    AllDataChar = "abcdef";
    AllData[0] = "ghi";
    AllData[1] = "jkl";
    }

    呼び出し側
    [DllImport("TEST_DLL.dll")]
    private extern static int DataRead(System.Text.StringBuilder[] rtnChar, ref System.Text.StringBuilder rtnCharAll );
    static void Main() {
    StringBuilder rtnCharAll = new StringBuilder(1024);
    StringBuilder[] rtnChar;
    rtnChar = new StringBuilder[1024];
    int iRtn = DataRead(rtnChar, ref rtnCharAll,10000);
    }

    しかし、この実行で、
    rtnChar とrtnCharAll の中身はNULLの様なのですが、
    何か抜けている処理、間違ってる記述等があるのでしょうか?
親記事 /過去ログ19より / 関連記事表示
削除チェック/

■8061  Re[1]: DLL Import を使用して、引数の返却値をとりたい。
□投稿者/ Jitta on the way -(2007/09/21(Fri) 18:32:52)
    No8060 (K.K さん) に返信
    > こんにちわ。
    > DLL Import を使用して、文字列の受け渡しをしたいと思っています。
    > ソースはこんな感じです。
    >
    > DLL側
    > extern "C" char PASCAL EXPORT DataRead(char *AllData[] , char *AllDataChar){
    > (中略)
    > AllDataChar = "abcdef";
    > AllData[0] = "ghi";
    > AllData[1] = "jkl";
    > }
    >
    > 呼び出し側
    > [DllImport("TEST_DLL.dll")]
    > private extern static int DataRead(System.Text.StringBuilder[] rtnChar, ref System.Text.StringBuilder rtnCharAll );
    > static void Main() {
    > StringBuilder rtnCharAll = new StringBuilder(1024);
    > StringBuilder[] rtnChar;
    > rtnChar = new StringBuilder[1024];
    > int iRtn = DataRead(rtnChar, ref rtnCharAll,10000);
    > }
    >
    > しかし、この実行で、
    > rtnChar とrtnCharAll の中身はNULLの様なのですが、
    > 何か抜けている処理、間違ってる記述等があるのでしょうか?

    呼ばれる側は C++ で、呼ぶ側は C# ?

    まず、C++ 同士で受け渡しができるか、確認してみましょう。多分、今のままでは出来ないと
記事No.8060 のレス /過去ログ19より / 関連記事表示
削除チェック/

■9354  Re[3]: c# タイムアウトに関して
□投稿者/ mk -(2007/10/25(Thu) 08:55:22)
    回答いただきありがとうございます。タイマを使う方法でやってみました。
    下記の方法でタイムアウトは検出できるのですが、呼び出し側がずうっと帰って
    こなかった場合、そのまま固まってしまいます。
    タイムアウトした場合は、次の処理に遷移できないのでしょうか?

    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    TimerThread tt = new TimerThread(100000);
    try
    {
             DLLのメソッド呼び出し。
    Console.WriteLine("テスト");
    }
    finally
    {
    tt.Terminate();
    }
    return;
    }

    public class TimerThread
    {

    private DateTime timeoutTime;
    private uint currentThreadId;
    private bool terminateFlag;
    private Thread thread;

    /// <summary>
    /// コンストラクタです。
    /// </summary>
    /// <param name="timeoutMillisec">タイムアウト値(ミリ秒)。</param>
    public TimerThread(int timeoutMillisec)
    {
    this.timeoutTime = DateTime.Now.AddMilliseconds(timeoutMillisec);
    this.currentThreadId = (UInt32)AppDomain.GetCurrentThreadId();
    this.terminateFlag = false;
    this.thread = new Thread(new ThreadStart(this.ThreadProc));
    this.thread.Start();
    }

    /// <summary>
    /// スレッド関数です。
    /// </summary>
    private void ThreadProc()
    {
    while (!this.terminateFlag)
    {
    Thread.Sleep(100);
    if (DateTime.Now > this.timeoutTime)
    {
    // タイムアウトが発生
    Console.WriteLine("timuout");
    return;
    }
    }
    }

    /// <summary>
    /// タイムアウト監視用スレッドを終了させます。
    /// </summary>
    public void Terminate()
    {
    this.terminateFlag = true;
    this.thread.Join();
    }
    }



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

■9461  メール送信でのAUTH認証について
□投稿者/ さとっぺ -(2007/10/27(Sat) 17:03:38)

    分類:[C#] 

    お世話になります。
    今まではメール送信でのAUTH認証をSystem.Web.Mailにて

     mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2;
    mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtsperver"] = "サーバー名";
     ・
     ・

    で送信していました。それを.NET2.0でSystem.Net.Mailに変更し、

     SmtpClient sc = new SmtpClient("サーバー名",ポート);
    NetworkCredential nc = new NetworkCredential("ユーザー名", "パスワード");
    sc.EnableSsl = false;
    sc.Credentials = nc;
    sc.Timeout = 100000;
    sc.Send(mail);

    で送信するとどうしても「SMTP サーバーにセキュリティで保護された接続が必要であるか、またはクライアントが認証されていません。 サーバーの応答: Authentication required」となってしまうのですが、
    解決する方法を教えてください。
親記事 /過去ログ22より / 関連記事表示
削除チェック/

■10063  uint型をbyte[]型に変換する方法
□投稿者/ Piz&Yumina -(2007/11/10(Sat) 22:48:52)
>

    分類:[C#] 

    uint型をbyte[]型に変換したいのですが、方法が分からず困っています。

    変換の方法ですが、例えば"1001001100101100000001011010010"の場合は、
     1001001 | 10010110 | 00000010 | 11010010
    このように、4個に分解してバイト配列に格納したいのです。

    試行錯誤した結果、int型については下のコードで実現できました。
    int[] fileSizeS = new int[] { fileSize };
    IntPtr fileSizeP = Marshal.AllocHGlobal(4);
    Marshal.Copy(fileSizeS, 0, fileSizeP, 1);
    byte[] byteFileSize = new byte[4];
    Marshal.Copy(fileSizeP, byteFileSize, 0, 4);
    Marshal.FreeHGlobal(fileSizeP);

    しかし、Marshal.Copy()が、uintに対応していないのでuint型からbyte[]型への変換はできませんでした。
    何か他に良い方法があったら教えてください。よろしくお願いします。
親記事 /過去ログ23より / 関連記事表示
削除チェック/

■10000  Re[1]: TabControlでコントロールが消える
□投稿者/ はつね -(2007/11/08(Thu) 23:38:01)
>
    No9997 (カエデ さん) に返信
    > private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
    > {
    > if (DialogResult.OK == MessageBox.Show(this, "Change OK?", "Test", MessageBoxButtons.OKCancel))
    > tabControl1.SelectedTab.Controls.Add(label1);
    > else
    > tabControl1.SelectTab(0);
    > }
    >
    > ここで、MessageBoxをcancelにした場合、tabpage1のラベルが表示されません。

    TabControl1_SelectingでMessageBOxをCancelしたらe.cancel=Trueにしてもだめですか?


    > Button操作の時に、ラベルが表示されるようにするのは、どうすればいいでしょうか?

    やろうとしていることはtabpageの移動のキャンセルに相当するのでは?
記事No.9997 のレス /過去ログ23より / 関連記事表示
削除チェック/

■10390  Re[1]: メール送信でのAUTH認証について
□投稿者/ おしっぺ -(2007/11/16(Fri) 17:51:26)
    No9461 (さとっぺ さん) に返信
    > お世話になります。
    > 今まではメール送信でのAUTH認証をSystem.Web.Mailにて
    >
    >  mail.Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2;
    > mail.Fields["http://schemas.microsoft.com/cdo/configuration/smtsperver"] = "サーバー名";
    >  ・
    >  ・
    >
    > で送信していました。それを.NET2.0でSystem.Net.Mailに変更し、
    >
    >  SmtpClient sc = new SmtpClient("サーバー名",ポート);
    > NetworkCredential nc = new NetworkCredential("ユーザー名", "パスワード");
    > sc.EnableSsl = false;
    > sc.Credentials = nc;
    > sc.Timeout = 100000;
    > sc.Send(mail);
    >
    > で送信するとどうしても「<b style="color:black;background-color:#a0ffff">SMTP</b> <b style="color:black;background-color:#99ff99">サーバーにセキュリティで保護された</b>接続が必要であるか、またはクライアントが認証されていません。 サーバーの応答: Authentication required」となってしまうのですが、
    > 解決する方法を教えてください。

    私も同じ問題で悩んでいます。
    その後、解決策は見つかりましたか?
記事No.9461 のレス /過去ログ23より / 関連記事表示
削除チェック/

■10649  Re[5]: プログラムの意見交換はいかがですか
□投稿者/ れい -(2007/11/23(Fri) 00:35:53)
    No10647 (カンタービレ さん) に返信
    >>じゃあマズお題をカンタービレさんからどうぞ!
    > ぎゃぼ!飲み会から帰ってきたら、お題のお題が出てマス〜><
    > 何かを競うのもいいデスが、遊びなので「プログラムしりとり」なんてどうでしょ?

    しりとりは単語として許される範囲がどのくらいかわからないので
    結局辞書がないとだめなきがする。
    検索して10000以上ヒットするワード、とかいう縛りがないと、
    ランダムなひらがなでもOKになってしまう。

    ある程度競う要素があったほうが楽しいかな?

    プログラム同士で競わせるのは
    RoboCupのシミュレーションリーグとか、
    株取引のシミュレーションとかありましたね。

    作って面白く、見てて面白いというのはなかなか難しいそうですね。
記事No.10626 のレス /過去ログ24より / 関連記事表示
削除チェック/

■10652  Re[6]: プログラムの意見交換はいかがですか
□投稿者/ カンタービレ -(2007/11/23(Fri) 00:48:38)
    No10649 (れい さん) に返信
    > しりとりは単語として許される範囲がどのくらいかわからないので
    > 結局辞書がないとだめなきがする。
    > 検索して10000以上ヒットするワード、とかいう縛りがないと、
    > ランダムなひらがなでもOKになってしまう。
    >
    > ある程度競う要素があったほうが楽しいかな?
    >
    > プログラム同士で競わせるのは
    > RoboCupのシミュレーションリーグとか、
    > 株取引のシミュレーションとかありましたね。
    >
    > 作って面白く、見てて面白いというのはなかなか難しいそうですね。

    せっかく複数の方のプログラムなら
    なんとなくリレーのようにつながっていくプログラムって面白いカナ〜って思ったんデス。
    でもぱっと思いつくのって難しいデスね。
記事No.10626 のレス /過去ログ24より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >>

ヒット件数が多いので過去ログ1〜103 までの検索結果 / 過去ログ104からさらに検索→

パスワード/

- Child Tree -