DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
NomalFILE.COPYでIOExceptionエラーが出る(11) | NomalVB6→2005変換時のDeclare宣言のマーシャリング属性(8) | NomalCode128でバーコードが読み取れない(8) | Nomal.Net 5.0 におけるDLL参照問題?(7) | Nomal親スレッドへ処理の移譲(7) | Nomal改行のコード(7) | NomalDrawBezierの使い方について(7) | NomalDataGridViewの行番号(7) | Nomalモードレスフォーム Warning IDE0067を回避したい(7) | NomalIE11では表示されるが、.netのWebBrowserでは、表示されないHPを表示する方法(7) | Nomalデスクトップ と Desktop(6) | Nomal.NetでのIPv6の比較(5) | Nomal新たにshowしたフォームでのボタンのクリック(5) | NomalDataObjectの使いまわし(5) | NomalWebBrowser Controlを使って、任意の値を取得(5) | Nomalこんな演算子初めて見ました。(5) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(5) | NomalあるWindows10PCでビルドしたEXEがW8.1以下で実行エラー(5) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(4) | NomalPHPでシリアライズした、データをデシリアライズしたい(4) | Nomalメジャーバージョンの異なるLog4netライブラリを参照したい(4) | NomalActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて(4) | NomalDeclare宣言するdllと参照追加をするdllの区別(4) | NomalVS2017で作成されたDLLをVS2005で作成されたAPで使用する方法(4) | Nomalフォルダ内の全ての容量を取得したい(4) | Nomal共変性と反変性ってこういうこと?(4) | Nomalプロセスからウインドウを取得(4) | NomalNewの使い方間違ってますか?(4) | Nomalユーザーコントロール内のテキストボックスのmodifiedプロパティ(4) | NomalJOIN操作の構文エラー(4) | Nomal動的にプロパティや変数の値の取得(4) | NomalVB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法(4) | NomalOracle への OleDb 接続に失敗する(3) | NomalVB.NETで作成したDLLをVB6.0から呼び出す(3) | Nomalデザイナで編集・チェックアウトキャンセルすると(3) | Nomal.Net 5.0 におけるServiceControllerの代替クラス(3) | NomalVB.netにおける固定長出力方法(3) | Nomal.net Chartで二重ドーナツグラフの作り方(3) | Nomalデザイナのプロパティウィンドウで静的プロパティを選択したい(3) | NomalAccess OLEでExecuteNonQuery(3) | NomalExcel複数シートの印刷順序(3) | NomalWMPへno(3) | NomalC#コンソールアプリでタイピング練習ソフト作成(3) | NomalLINQのメソッド構文の書き方(3) | Nomalvb.net+SQLiteで複数データベースファイルへのトランザクション方法(3) | Nomalジェネリック型インターフェースを使った変数を扱いたい(3) | NomalProcess.WaitForExitで正常に動作しない?(3) | NomalPictureBox.Locationのキャンセル(3) | NomalCatch時のex.StackTraceの情報(3) | NomalVisualStudioでマクロ(3) | NomalOracleDataAccess を参照したプログラムでデバッグモードが機能しなくなる(3) | NomalVisualStudioでExcelのVSTO開発(3) | NomalVB.NETでCSVを読み込む際にSQL文を使いたい(3) | NomalDrawImage でメモリ不足エラー(3) | NomalVb.netからAccessへの接続について(3) | Nomal令和の日付への対応(3) | NomalVB.net非同期処理でtextboxに出力したい(2) | NomalToolStripStatusLabelの空白部分を埋めたい(2) | NomalクラスによるGetBytes関数のエンディアンの違い(2) | Nomal[VB.NET]Excelのプロセスが終了しない(2) | NomalC#をVBに変換した際の強制的な参照渡し(2) | Nomalリッチテキストボックスの文字を太文字にしたい(2) | NomalLIstview のDataSource(2) | NomalClassの作り方(2) | NomalVB.NETのVBA化(2) | NomalStopwatchクラスのElapsedMillisecondsの挙動(2) | NomalGoogle翻訳の結果の取得(2) | Nomalexeをショートカットから起動した場合のエラー(2) | Nomal二次元配列 インデックスが配列の境界外(2) | NomalKeyDownでの右コントロールキーイベント(2) | Nomalapp.config定義によるネットワークトレースログの世代管理(2) | Nomalrelease/debugのどちらで作成されたものかを判断する方法(2) | NomalTaskクラスを.NET Framework 2.0で実現させる方法(2) | NomalWebBrowser Control foreachで値が消える(2) | NomalEditボックスに簡体字をセットする方法(2) | NomalWebClientが上手く動かない(2) | Nomalフォーム外のカーソルの変更(2) | Nomalラムダ式の勉強中(2) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(2) | NomalC#をVBに変換(2) | NomalWebClientで、短期間にDownloadStringAsyncを実行したい(2) | NomalマウスのないOSでマウスカーソルの表示(2) | NomalToolStripMenuItemにShortcutKeysを指定した際の、元のコントロールを取得する方法(2) | NomalMouseEventArgsのカレント座標(2) | Nomalリッチテキストボックスでの字間の調整(2) | NomalVC++ → VB.Netに変換時に文法エラー(2) | NomalSQL-Server Compact 4.0が表示されない(2) | Nomalバーコードの数字を非表示にしたい(2) | Nomal追加コントロールのtabindex値を既存の間に設定する方法(1) | Nomal正規表現で株価を取得したい(1) | NomalOpenFileDialogの初期ファイル名の表示が変(1) | NomalVB.netで作成したexeのNgenによる弊害(1) | NomalGROUPBOXの複製について(vb.net)(1) | Nomal自分自身を呼び出すのはOKですか(1) | NomalList型でエラーが起きてしまい・・・(1) | NomalLINQの拡張メソッドの定義(1) | NomalRDP接続でのネットワーク帯域制限(0) | Nomal必須コンポーネントの一覧に追加したい(0) | NomalApp.configのMy.Application.Log設定で使用できない属性が出る(0) | Nomalvb2010を使用したmicrosoft Wordの任意の行の削除(0) |



■記事リスト / ▼下のスレッド
■34273 / 親記事)  FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィス・ケイ 一般人(1回)-(2019/07/03(Wed) 09:25:29)
  • アイコン環境/言語:[WindowsCE6.0 VB.NET2008 .NET Compact FrameWork3.5 ] 
    分類:[.NET] 

    初めまして。
    初めて投稿します。

    現在、Vb.net2008でPDAの開発を行っています。
    PDAのOSはWindows CE6.0になります。
    フレームワークは.net CompactFrameWork3.5です。

    処理内容として、PDAで作成されたテキストファイルをネットワーク越しの共有フォルダにコピーしています。

    File.COYを使用しているのですが、稀にシステムエラー(IOException)で処理が落ちるのです。
    原因として何が考えられるのでしょうか?
    ネットワークは無線LANで接続しています。

    ----- 参考ソース ------

    sFileRireki:送信元ファイル
    sFileTRireki:送信先ファイル
    psInit.sUpLoadD:送信先フォルダ

    Try

    If File.Exists(sFileRireki) = True Then 'あり
    If Directory.Exists(psInit.sUpLoadD + "\") = False Then
    sErrMsg = "アップロード先フォルダが無いか、ネットワーク接続できませんでした。(COPY直前チェック)" + vbCrLf + psInit.sUpLoadD
    Return False
    End If
    IO.File.Copy(sFileRireki, sFileTRireki,True)
    '送信後、削除
    If File.Exists(sFileRireki) = True Then
    File.Delete(sFileRireki)
    Else
    Return False
    End If
    Else
    Return False
    End If
    Catch ex As Exception
    sErrMsg = "アップロード(履歴データ送信)に失敗しました。" + vbCrLf + vbCrLf + ex.Message
    Return False
    Finally
    Call sub_WriteLog(sErrMsg, "", pciLogModeE, "fnc_LogDataSend")
    End Try

    ------- エラー内容 ----------

    アップロード(履歴データ送信)に失敗しました。IOException

    以上になります。
    よろしくお願いします。

違反を報告
引用返信

▽[全レス11件(ResNo.7-11 表示)]
■34280 / ResNo.7)  Re[6]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィスケイ 一般人(2回)-(2019/07/10(Wed) 08:05:16)
  • アイコンNo34278に返信(魔界の仮面弁士さんの記事)

    > ユーザー環境でのみ発生する事象という事で追跡しにくいですが、
    > 母艦(ファイル送信先)側で監査ログを取るようにして、
    > 例外が発生した時刻付近のイベント ビューワーのログが、
    > いつもと違う内容になっていないか確認してみては如何でしょう。



    =>ご回答ありがとうございます。
     監査ログを取るなどして、もう少し調べてみたいと思います。


違反を報告
引用返信
■34281 / ResNo.8)  Re[2]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィスケイ 一般人(3回)-(2019/07/10(Wed) 08:07:18)
  • アイコンNo34279に返信(kikuさんの記事)
    >
     回答ありがとうございます。
     ご提示して頂いた内容を踏まえ、いろいろとやってみたいと思います。
     ありがとうございました。
違反を報告
引用返信
■34282 / ResNo.9)  Re[4]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィス・ケイ 一般人(2回)-(2019/07/16(Tue) 13:13:25)
  • アイコンNo34276に返信(魔界の仮面弁士さんの記事)
    > ■No34275に返信(オフィス・ケエイさんの記事)
    >
    > また、エラー発生時点の StackTrace を記録することは出来ますか?
    > (Exception の ToString でも OK です)

    => 下記にExceptionのToStringを取りました。

    System.IO.IOException:
    IOException
    場所 System.IO.__Error.WinIOError(Int32 errorCode, String str)
    場所 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
    場所 〇〇.mod_〇〇.fnc_LogDataSend(String& sErrMsg, StatusBar stbMsg)
    場所 〇〇.frm01_Main.ProcUpLoad()
    場所 〇〇.frm01_Main.btnSave_Click(Object sender, EventArgs e)
    場所 System.Windows.Forms.Control.OnClick(EventArgs e)
    場所 System.Windows.Forms.Button.OnClick(EventArgs e)
    場所 System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
    場所 System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
    場所 Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
    場所 System.Windows.Forms.Application.Run(Form fm)
    場所 〇〇.mod_〇〇.Main()

    ※〇〇はユーザー名が入っているので、隠しますね。

    この内容で何かわかりますでしょうか?


違反を報告
引用返信
■34288 / ResNo.10)  Re[5]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ 魔界の仮面弁士 大御所(1236回)-(2019/07/30(Tue) 11:49:55)
  • アイコン2019/07/30(Tue) 11:50:26 編集(投稿者)

    No34282に返信(オフィス・ケイさんの記事)
    > System.IO.IOException:
    > IOException
    > 場所 System.IO.__Error.WinIOError(Int32 errorCode, String str)
    > 場所 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
    > 場所 〇〇.mod_〇〇.fnc_LogDataSend(String& sErrMsg, StatusBar stbMsg)


    File.InternalCopy が呼ばれるのは、
    System.IO.File の Copy メソッドもしくは
    System.IO.FileInfo の CopyTo メソッドのいずれかですね。

    そして、InternalCopy が直接 __Error.WinIOError を呼び出す箇所は、
    No34274 で言う所の 3 または 13 のいずれかしかなく、
    最終結果が IOException であることから、13 であったと思われます。

    ただ、CopyFile API がどうしてそういう errorCode を吐いたのかは不明のまま…。


    No34275に返信(オフィス・ケエイさんの記事)
    > また、その後はリトライしても同様にIOExceptionで落ちます。
    >  プログラムを一旦終了し、再度起動させるとうまくいきます。

    通信障害などで失敗した時に、それを引きずってしまうのかな…。

    アプリケーションの再起動で回避できるようなので、
    No34276 の最後に書いたように、ファイルコピー用の exe を用意し、
    System.Diagnostics.Process.Start で呼び出す方式でリトライするとか。

    .NET Compact Framework 1.0 では Process クラスが無いけれど、
    .NET Compact Framework 2.0 以降なら使えるはず。
違反を報告
引用返信
■34292 / ResNo.11)  Re[3]: FILE.COPYでIOExceptionエラーが出る
□投稿者/ オフィス・ケイ 一般人(3回)-(2019/08/02(Fri) 08:09:08)
  • アイコンお世話になります。

    file.copyに失敗したとき、
    現状は1回の失敗でエラーを出力して終わっていましたが
    何回かリトライしてそれでもだめだったらエラーを吐き出す。
    ように修正して様子を見てみます。

    回答を頂いた皆様ありがとうございました。

    この件は一旦解決済みとさせていただきます。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-9] [10-11]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34499 / 親記事)  VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(11回)-(2020/07/13(Mon) 17:33:13)
  • アイコン環境/言語:[VB.NET、.NET Framework2.0] 
    分類:[.NET] 

    VB6.0のプロジェクトをVS2005のコンバート機能を使用して変換したのですが、以下のワーニングが出ています。

    'UPGRADE_WARNING: 構造体 FileTime に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。
    Public Declare Function LocalFileTimeToFileTime Lib "KERNEL32.DLL" (ByRef lpLocalFileTime As FileTime, ByRef lpFileTime As FileTime) As Integer

    なお、FileTime構造体は以下の通りです。

    'FileTime構造体
    Public Structure FileTime
      Dim LowDateTime As Integer
      Dim HighDateTime As Integer
    End Structure

    Declare宣言時に引数の型に構造体を定義するときの属性は何を渡せばよいのでしょうか?
    それとも構造体のメンバの方に属性を追加するのでしょうか?

    ご存知の方がいらっしゃいましたら、ご教示いただけると幸いです。

違反を報告
引用返信

▽[全レス8件(ResNo.4-8 表示)]
■34503 / ResNo.4)  Re[2]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(14回)-(2020/07/13(Mon) 19:39:19)
  • アイコンNo34502に返信(Hongliangさんの記事)
    > おそらくその警告は、Declare文中にByRefで構造体を渡しているところ全部に自動的に付けられるものかと思います。
    > 提示されているLocalFileTimeToFileTime関数のDeclare文については、特に問題さそうです。
    > (他の関数のDeclare文で出ている箇所がある場合、それが問題ないかは個別の話になります)
    >


    ご回答ありがとうございます。

    問題があるかないかの判断はどのように考えればよろしいのでしょうか?
    他にもいくつか同じワーニングが表示されている場所があります。
    さすがに全部ここで質問するわけにもいきませんので、判断の基準がありましたらご教示いただけませんでしょうか。

違反を報告
引用返信
■34504 / ResNo.5)  Re[3]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ Hongliang 大御所(584回)-(2020/07/13(Mon) 20:04:45)
  • アイコン> 問題があるかないかの判断はどのように考えればよろしいのでしょうか?
    > 他にもいくつか同じワーニングが表示されている場所があります。
    > さすがに全部ここで質問するわけにもいきませんので、判断の基準がありましたらご教示いただけませんでしょうか。

    特に怪しいところ、という意味では、構造体内に配列や文字列型が含まれている部分と言えますが、
    結局はすべてを1つ1つ、構造体の定義も含めたAPI定義を正しくVBに翻訳できているか確認していくことになります。
    https://docs.microsoft.com/ja-jp/dotnet/framework/interop/marshaling-classes-structures-and-unions
    一応公式ドキュメントはこの辺りです。
    // 初心者の方に対して無茶ぶりが過ぎるだろうとは思います。

    結構な数のWindows APIについては、以下のサイトにサンプル定義が載っています。
    https://www.pinvoke.net/
    Declareの代わりに<DllImport>構文だったり、C#による定義しかなかったり、といったものも多いですが。
違反を報告
引用返信
■34505 / ResNo.6)  Re[4]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(15回)-(2020/07/13(Mon) 20:11:52)
  • アイコンNo34504に返信(Hongliangさんの記事)

    ご回答ありがとうございます。
    ご教示いただいたページを読んでみたいと思います。
    ありがとうございました。
違反を報告
引用返信
■34506 / ResNo.7)  Re[5]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ 魔界の仮面弁士 大御所(1286回)-(2020/07/14(Tue) 05:11:36)
  • アイコン2020/07/14(Tue) 09:09:11 編集(投稿者)

    No34501に返信(naoさんの記事)
    > Option Strict Offになっていますし、

    API を使うなら、できるだけ Option Strict On で動作するようコーディングされることをお奨めします。


    No34499に返信(naoさんの記事)
    > なお、FileTime構造体は以下の通りです。

    実は自前で宣言しなくても、.NET Framework には
    System.Runtime.InteropServices.ComTypes.FILETIME
    という構造体が既に用意されていたりします。


    > 'UPGRADE_WARNING: 構造体 FileTime に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。
    Google ってみたところ、英語版の VS2005 だと、
     'UPGRADE_WARNING: Structure FileTime may require marshalling attributes to be passed as an argument in this Declare statement. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="C429C3A5-5D47-4CD9-8F51-74A1616405DC"'
    になり、VS2003 の場合は、
     'UPGRADE_WARNING: Structure FileTime may require marshalling attributes to be passed as an argument in this Declare statement. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1050"'
    というメッセージになるらしいです。

    手元に ms-help プロトコルを開ける環境が残っていないので未確認ですが、「Visual Studio 2005」と共に
    「Visual Studio 2005 MSDN Library」をインストールしてあればリンクを開けるかもしれません。
    (リンクを開けたとしても、有益な情報を得られない可能性は高そうですが)


    上記リンクについて、何か情報が無いか探してみたのですが、見つかったのはこれぐらい。
    https://www.mobilize.net/vbtonet/ewis/ewi1050
    それっぽいことが書かれているものの、VB6 なのにユーザー定義型を ByRef ではなく ByVal 渡ししている時点で、資料として不自然ですね。

    あとは下記がヒットしました。
    37 ページ目の「3.5.2 Structure may require Marshalling Attributes to be passed as an Argument in this Declare Statement.」の項。

    今回の LocalFileTimeToFileTime のための有益な情報にはなるかどうかは別として、一応参考までに。
    https://www.cs.kau.se/cs/education/courses/davcdiss/Exjobb_2008/C2008-06.pdf



    > Declare宣言時に引数の型に構造体を定義するときの属性は何を渡せばよいのでしょうか?
    > それとも構造体のメンバの方に属性を追加するのでしょうか?

    Hongliang さんご提示の pinvoke.net は私もたびたび参考にさせてもらっていますが、今回の
    LocalFileTimeToFileTime API の宣言は掲載されていないみたいですね。
    FileTimeToLocalFileTime API の宣言は掲載されているのですけれども。

    すでに示されているように、今回の宣言は、自動変換された宣言のままで動くと思います。
    もしあえて修正するとすれば、In 属性および Out 属性を明示して
     ' Imports System.Runtime.InteropServices
     Public Declare Function LocalFileTimeToFileTime Lib "KERNEL32.DLL" (<[In]> ByRef lpLocalFileTime As FileTime, <Out> ByRef lpFileTime As FileTime) As <MarshalAs(UnmanagedType.Bool)> Boolean
     Public Declare Function FileTimeToLocalFileTime Lib "KERNEL32.DLL" (<[In]> ByRef lpFileTime As FileTime, <Out> ByRef lpLocalFileTime As FileTime) As <MarshalAs(UnmanagedType.Bool)> Boolean
    のようにすると良いのではないでしょうか。
    元の Win32 API の戻り値が「BOOL 型」であるため、上記では戻り値も As Boolean に変更してあります。


    No34503に返信(naoさんの記事)
    >>おそらくその警告は、Declare文中にByRefで構造体を渡しているところ全部に自動的に付けられるものかと思います。
    >>提示されているLocalFileTimeToFileTime関数のDeclare文については、特に問題さそうです。
    > 問題があるかないかの判断はどのように考えればよろしいのでしょうか?

    配列や文字列型以外の注意点として思いつくのは、StructLayout 属性の付与とか。

    例えば SHFILEOPSTRUCT 構造体は、StructLayout 属性で Pack:=1 を指定しておかないと、
    fAnyOperationsAborted 以降のメンバー位置がズレてしまうことになります。

    冗長なので、既定の設定のままで問題が無い場合は、属性指定を省略することも多いですが、
    余裕があれば StructLayout 属性にて、CharSet と Pack、時には Size も明示しておいた方が良いと思います。


    その他、個別判断が必要な例としては、 KB161301 の WindowFromPoint API が挙げられます。

    この API の本来の定義は『HWND WindowFromPoint( POINT Point );』なのですが、VB6 の制限により、
    多くの場合、引数定義を (ByVal xPoint As Long, ByVal yPoint As Long) に置き換えて代用されています。
    また、VBA7 でいうところの As LongPtr 型がまだ使えないので、戻り値が As Long で代用されているわけですが、
    これらそれぞれの「As Long」を、.NET の As Integer と As IntPtr に再翻訳する作業は、
    アップグレード ウィザードの自動変換だけではまかないきれないでしょう。
違反を報告
引用返信
■34507 / ResNo.8)  Re[6]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(16回)-(2020/07/14(Tue) 19:59:13)
  • アイコンNo34506に返信(魔界の仮面弁士さんの記事)
    > 2020/07/14(Tue) 09:09:11 編集(投稿者)
    ご回答ありがとうございます。

    色々調べてくださって、ありがとうございます。

    やはり特定の判断基準はないのですね。
    ご教示いただいたページを見ながら修正を検討してみます。
    ありがとうございました。

違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-8]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34243 / 親記事)  Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(8回)-(2019/04/30(Tue) 12:59:08)
  • アイコン環境/言語:[VB.NET] 
    分類:[.NET] 

    2019/04/30(Tue) 14:07:30 編集(投稿者)
    2019/04/30(Tue) 14:06:30 編集(投稿者)
    2019/04/30(Tue) 14:05:47 編集(投稿者)
    2019/04/30(Tue) 14:05:30 編集(投稿者)
    
    Zxing.NetのCode128でバーコードを作成し、
    ハンディターミナルで読み取りをしています。
    4桁や15桁のバーコードはすぐに値を検知するのですが、
    40桁のバーコードはなかなか検知してくれません。
    以下、ソースを書きました。
    何か問題点があれば、ご教示願います。
    
    
    --------------------------------------------------------------------------
    Dim img As New Bitmap(2200, 1000, Imaging.PixelFormat.Format24bppRgb)
    
    Using g = Graphics.FromImage(img)
    
      Dim writer As New ZXing.BarcodeWriter
    
      'バーコードの種類
      writer.Format = ZXing.BarcodeFormat.CODE_128
    
      'マージン
      writer.Options.Margin = 1
    
      '文字コード
      writer.Options.Hints(ZXing.EncodeHintType.CHARACTER_SET) = "Shift_JIS"
        
      writer.Options.PureBarcode = blnPureBarcode
    
      'エラー訂正レベル
      writer.Options.Hints(ZXing.EncodeHintType.ERROR_CORRECTION) =
                                  ZXing.QrCode.Internal.ErrorCorrectionLevel.L
    
      '作成
      dim btmp as Bitmap = 
                  writer.Write("1234567890ABCDEFGHIJ1234567890ABCDEFGHIJ")
    
      g.DrawImage(btmp, 1080, 560, 310, 110)
    End Using
    --------------------------------------------------------------------------
    
    
    又、作成したバーコードも添付します。
    幅を広げれば少しは読み取れるようになるのですが、
    幅は変えずにバーコードの太さを変える方法等あれば。
    

415×59 => 250×35
イメージ
1556596748.png
/3KB
違反を報告
引用返信

▽[全レス8件(ResNo.4-8 表示)]
■34248 / ResNo.4)  Re[4]: Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(9回)-(2019/04/30(Tue) 23:39:39)
  • アイコンご回答ありがとうございます。
    説明不足で申し訳ありません。

    > 汎用的なプログラムを作っているのか、自分専用のプログラムを
    > 作っているのか、どちらなのでしょうか?

    客先に納品予定で、RFIDタグにバーコードを出力する
    プログラムを作成しています。
    旧システムから出力されるバーコードもcode128を使用していた為、
    ほぼ同じ幅・長さで40桁のバーコードを作成したところ、
    ハンディでなかなか読み取れませんでした。
    (旧システムはすぐに読み取れる事ができて、線も太いです)

    そこで幅や長さを度外視して、まずは確実にハンディで読み取れるように
    手探りで設定を変更していました。



違反を報告
引用返信
■34250 / ResNo.5)  Re[5]: Code128でバーコードが読み取れない
□投稿者/ Azulean 大御所(510回)-(2019/05/01(Wed) 00:42:22)
  • アイコンNo34248に返信(ぴょんさんの記事)
    > 客先に納品予定で、RFIDタグにバーコードを出力する
    > プログラムを作成しています。

    RFID タグにバーコードを出力する…という表現では具体像が見えづらいのですが、シールプリンターか何かですか?
    それとも普通のインクジェットプリンターで専用のシール台紙に印刷しているのですか?

    印刷であれば、プリンターの解像度、印刷するための処理の作り方に左右されると思います。(今掲載されていないコードの範囲も影響しうる)

    > そこで幅や長さを度外視して、まずは確実にハンディで読み取れるように
    > 手探りで設定を変更していました。

    Bitmap や DrawImage あたりを触るだけでは解決市内可能性もあります。
    自分が扱っている画像の解像度(DPI)は何で、プリンターなどの出力に流す際にその DPI(解像度)はどうなるのかをきちんと把握して、元画像のあるべき姿を決めにかからないといけないと思われます。
違反を報告
引用返信
■34251 / ResNo.6)  Re[6]: Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(10回)-(2019/05/01(Wed) 10:09:01)
  • アイコン2019/05/01(Wed) 10:21:06 編集(投稿者)
    2019/05/01(Wed) 10:17:02 編集(投稿者)
    2019/05/01(Wed) 10:10:48 編集(投稿者)

    ご回答ありがとうございます。
    ソースに問題があると思い込んでいました。

    > シールプリンターか何かですか?
    > それとも普通のインクジェットプリンターで専用のシール台紙に
    > 印刷しているのですか?

    リコーのRFID出力プリンタに、バーコードを出力しています。

    https://industry.ricoh.com/rfid/printer/prkl.html

    印刷する用紙は、以下のRFIDタグを使用しています。

    https://industry.ricoh.com/rfid/recoview/about/


    バーコード等のデザインを印刷する場合、
    [34243]でコーディングしたbmpを8ビットのグレースケールにし、
    バイト配列に変換したデータを、
    プリンタ側に渡す仕様になっていました。





違反を報告
引用返信
■34252 / ResNo.7)  Re[7]: Code128でバーコードが読み取れない
□投稿者/ Azulean 大御所(511回)-(2019/05/02(Thu) 09:16:34)
  • アイコン2019/05/02(Thu) 09:22:40 編集(投稿者)

    No34251に返信(ぴょんさんの記事)
    > ソースに問題があると思い込んでいました。

    ソースコードの問題である可能性は、否定できません。
    ただし、今抜粋されている範囲内に問題があるかどうかはわかりません。

    添付されている画像を見る限り、縮小時に補間がかかっていて、中間色が出ているようなので、これは読み取りに影響を与えると思われます。
    Graphics.InterpolationMode へ NearestNeighbor を指定すればマシになるかどうか。

    また、BarcodeWriter には Options があるらしいので、そこでサイズを指定する方法に切り換えるという道もあるかもしれません。(後から縮小するよりもまっとうなやり方だと思います)
    参考:https://office-fun.com/tech-memo-zxingnet-1d-barcode/


    > リコーのRFID出力プリンタに、バーコードを出力しています。

    ニッチな用途なので、これに特有の問題であれば、第三者には助言できないと思います。
    基本的には質問者さんの自助努力で頑張るしかないです…。
違反を報告
引用返信
■34255 / ResNo.8)  Re[8]: Code128でバーコードが読み取れない
□投稿者/ ぴょん 一般人(11回)-(2019/05/07(Tue) 11:02:53)
  • アイコンご回答ありがとうございます。
    返信が遅くなり、申し訳ありません。

    > Graphics.InterpolationMode へ NearestNeighbor を指定すれば
    > マシになるかどうか。
    InterpolationModeプロパティをいろいろ試したところ、
    高品質双三次補間がハンディで一番検知しやすかったです。

    Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic


    > また、BarcodeWriter には Options があるらしいので、
    > そこでサイズを指定する方法に切り換えるという道もあるかもしれません。
    サイズ指定も以下に修正しましので、
    作業を進めていきたいと思います。

    --------------------------------------------------------------------------
    'サイズ指定
    writer.Options.Width = 310 '幅
    writer.Options.Heigth = 110 '高さ

    '作成
    dim btmp as Bitmap =
    writer.Write("1234567890ABCDEFGHIJ1234567890ABCDEFGHIJ")

    g.DrawImage(btmp, 1080, 560)
    ''g.DrawImage(btmp, 1080, 560, 310, 110)
    --------------------------------------------------------------------------

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-8]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34647 / 親記事)  .Net 5.0 におけるDLL参照問題?
□投稿者/ あばば無人君 一般人(24回)-(2021/02/20(Sat) 12:41:50)
  • アイコン環境/言語:[Windows10(2004) 64bit、.Net 5.0、VS2019(16.8.5)Com版、C#] 
    分類:[.NET] 

    いつも本掲示板でお勉強させていただいております。

    さてタイトルの件ですが、現在以下2つのプロジェクトがあります。
    ・プロジェクトA:DLL
    ・プロジェクトB:プロジェクトAを参照するWinFormアプリ(EXE)

    プロジェクトBは上記の通り依存関係(昔のVSで言う"参照")の
    設定にて、プロジェクトAの出力ディレクトリにあるDLLを
    参照しています。

    この状態でビルド後プロジェクトBの出力ディレクトリを見ると
    BのEXEだけでなくAのDLL+PDBも存在していました。

    Aの出力ディレクトリにあるDLL+PDBとバイナリ比較しましたが
    差異は有りませんでした。また、EXEは普通に実行できました。

    問題はここからなのですが、ビルド後Bの出力ディレクトリに
    AのDLL+PDBをコピーさせない様にするため、Bの依存関係にある
    Aのプロパティを表示し、「ローカルにコピー」をいいえに
    設定しました。

    この状態でビルドすると想定通りBの出力ディレクトリに
    AのDLL+PDBは配置されなくなりました。
    もちろんEXEの実行にも失敗します。
    (イベントビューアーのアプリケーションログにエラーが出る)

    ところがAの出力ディレクトリにあるDLL+PDBをコピーして
    Bの出力ディレクトリに持ってきても、EXEの実行に失敗します。

    AのDLL+PDBを持ってくれば「ローカルにコピー」をいいえに
    する前と同じ状態になっている筈なのに何故実行に失敗するのか
    理由が分かりません。
    (昔の.Net Frameworkで同じことをしたら実行できた様な気が…)

    理由が分かる方がいらっしゃいましたら教えて頂きたいです。
    また、コピーしてきてからEXEを動かせる様にする方法も
    ご存知でしたら併せて教えて頂きたいです。

    以上です。宜しくお願い致します。

違反を報告
引用返信

▽[全レス7件(ResNo.3-7 表示)]
■34650 / ResNo.3)  Re[2]: .Net 5.0 におけるDLL参照問題?
□投稿者/ あばば無人君 一般人(26回)-(2021/02/20(Sat) 18:39:20)
  • アイコンAzuleanさん、ご返信ありがとうございます。

    > ローカルコピーを「いいえ」にすると、deps.json に依存関係が記述されなくなります。
    > deps.json に書かれていないアセンブリはアプリと同じフォルダーであっても読み込まれなくなります。

    上記ですが、個人的にはう〜んって感じです。
    VisualStudio上ではローカルコピーを「いいえ」にしていても
    プロジェクトAのDLLにある関数などは使える(ビルドも通る)のに、
    いざ実際にEXEを起動しようとするとdeps.jsonに記述が無いから
    DLLがあっても読み込まない→そして起動に失敗するって、これでは
    ローカルコピーの設定が何のためにあるのかわかりません。

    こんな開発者を混乱させる動きにするぐらいならそもそも
    ローカルコピーの設定自体無い方がよい気がしました。
    何か意味/メリットってありますかね…?


    > とりあえず、ローカルコピー「いいえ」でなんとかするやり方はやめた方が良いと思います。

    現状そうするしかありませんね…。
    ローカルコピーはありにして、他のDLLやEXEを全て手動で纏める
    開発方針にします。


    他の記述含めご返信、ありがとうございました。
    (愚痴っぽくなってしまい申し訳ありませんでした)

違反を報告
引用返信
■34651 / ResNo.4)  Re[3]: .Net 5.0 におけるDLL参照問題?
□投稿者/ Azulean 大御所(526回)-(2021/02/20(Sat) 18:51:12)
  • アイコンNo34650に返信(あばば無人君さんの記事)
    > VisualStudio上ではローカルコピーを「いいえ」にしていても
    > プロジェクトAのDLLにある関数などは使える(ビルドも通る)のに、
    > いざ実際にEXEを起動しようとするとdeps.jsonに記述が無いから
    > DLLがあっても読み込まない→そして起動に失敗するって、これでは
    > ローカルコピーの設定が何のためにあるのかわかりません。

    お望みのことを満たすための機能ではないということでしょう。

    ・ビルド時に参照する DLL と、実行時に使う DLL が異なるとき
     →その DLL は別途インストールするなど、アプリケーションの固有 DLL ではない。

    ・ソリューションが何十ものプロジェクトで構成されていて、個別にコピーしているとディスクコピーが多くてビルドが長くなる
     →アプリケーションプロジェクトだけコピーするようにしたい


    「同一ソリューションでプロジェクト参照して何もいじらない」がスタンダードな使い方です。
    ローカルコピーをいじる必要なんて .NET Framework 時代でもほぼなかったはずですので。
違反を報告
引用返信
■34652 / ResNo.5)  Re[4]: .Net 5.0 におけるDLL参照問題?
□投稿者/ あばば無人君 一般人(27回)-(2021/02/21(Sun) 13:02:55)
  • アイコンAzuleanさん、ご返信ありがとうございます。

    > ・ビルド時に参照する DLL と、実行時に使う DLL が異なるとき
    >  →その DLL は別途インストールするなど、アプリケーションの固有 DLL ではない。

    上記ですが、私の知識不足かご記載の内容が理解できません。

    ビルド時に参照するDLLと、実行時に使うDLLが異なっていても
    いなくても、deps.jsonに記述が無ければEXEの起動に失敗する
    結果は一緒ではないでしょうか?

    別途インストールするDLLだと、deps.jsonに記述が無くても
    EXEの起動が成功するケースがあったりするのでしょうか?


    > ・ソリューションが何十ものプロジェクトで構成されていて、個別にコピーしているとディスクコピーが多くてビルドが長くなる
    >  →アプリケーションプロジェクトだけコピーするようにしたい

    なるほど!ビルド時間は盲点でした。
    コピーの工程が無くなればビルド時間が短くなるという
    メリットはありますね。

    ただ、deps.jsonに記述が無いのでEXEの起動に失敗するという
    結果は変わらない様な気がしますが。


    > 「同一ソリューションでプロジェクト参照して何もいじらない」がスタンダードな使い方です。

    確かにスタンダードの1つです。
    ですが、フレームワークとなるDLLの開発と、そのDLLを使った
    業務案件の開発などとで、ソリューションが異なることもよくある
    ケースかと思います。


    > ローカルコピーをいじる必要なんて .NET Framework 時代でもほぼなかったはずですので。

    それを言ってしまうと、前回の私の投稿にある
    > ローカルコピーの設定自体無い方がよい気がしました。
    と、同じ感じになりませんか?


    …なんかいまいち会話が噛み合っていない様な気がします。

違反を報告
引用返信
■34653 / ResNo.6)  Re[5]: .Net 5.0 におけるDLL参照問題?
□投稿者/ Azulean 大御所(527回)-(2021/02/21(Sun) 16:42:43)
  • アイコン2021/02/21(Sun) 16:48:49 編集(投稿者)

    No34652に返信(あばば無人君さんの記事)
    > …なんかいまいち会話が噛み合っていない様な気がします。

    私は「こう思う」と主張しているだけで、合意を得たいわけでもないですし、開発チームの思いを代弁できるわけでもありませんので、その点は理解いただければ。

    とりあえず、「.NET 5 世代でローカルコピーを触ることはほぼない」言えると思います。
    (有用なケースは、ビルド時間短縮の工夫で存在するとは思います)


    > ビルド時に参照するDLLと、実行時に使うDLLが異なっていても
    > いなくても、deps.jsonに記述が無ければEXEの起動に失敗する
    > 結果は一緒ではないでしょうか?

    アプリケーションと一緒にインストールするとは限らないのでは?と考えてこのように書きましたが、GAC の概念が廃止されていることを考えると、このシナリオは存在しないかもしれません。
    調査不足ですみません。。。

    (ADDITIONAL_DEPS で無理矢理追加することはできそうですが、一般的とは言えないかもしれません)
    https://docs.microsoft.com/ja-jp/dotnet/core/dependency-loading/default-probing#host-configured-probing-properties


    > ただ、deps.jsonに記述が無いのでEXEの起動に失敗するという
    > 結果は変わらない様な気がしますが。

    「アプリケーションプロジェクトだけコピーするようにしたい」で示したつもりでしたが、書き方を改めると「アプリケーションプロジェクトで参照し、ローカルコピーする」ということです。
    ビルドイベントや手作業のコピーの話ではありません。

    > ですが、フレームワークとなるDLLの開発と、そのDLLを使った
    > 業務案件の開発などとで、ソリューションが異なることもよくある
    > ケースかと思います。

    その DLL だけのコピーで異なるソリューションへ配布・連携してしまうと、外部依存関係が引き継がれないので、DLL 単位での配布・連携はそろそろやめた方が良いかもしれません。
    .NET 5 の開発では NuGet パッケージに依存することが多いため、その外部依存関係をきちんと伝搬しないと、deps.json に記載がなくて実行時エラーになりかねません。

    ソリューションを分けないといけなくなったら、ローカルの NuGet パッケージ作らないといけないかもしれませんね。

    なお、本格的に業務で取り組む状況になっていないので、最適論はわかりません。
    .NET 5 のサポートも来年 1 月で終わる短期ものなので(LTS ではないので)、移行する企業は少ないのではないでしょうか?


    > それを言ってしまうと、前回の私の投稿にある
    >>ローカルコピーの設定自体無い方がよい気がしました。
    > と、同じ感じになりませんか?

    「安易に使うと起動しない exe になるなら、そんな設定見せるべきじゃない」は極端じゃないですか?
    ビルド時間短縮に効果のある技としては使えるので、わかっていて使う人が使うには良いでしょう。
    (このプロパティの存在を知っていて使っている人は .NET 開発者の中で多数派とは言えないはず…)

    あくまで私は「このように思う」を書いているのであって、機能の存在意義を議論したいわけではありません。
    もし、存在意義がないから機能をなくすべきでは…と提案したいのであれば、Developer Community に挙げてください。
違反を報告
引用返信
■34654 / ResNo.7)  Re[6]: .Net 5.0 におけるDLL参照問題?
□投稿者/ あばば無人君 一般人(28回)-(2021/02/22(Mon) 11:57:04)
  • アイコンAzuleanさん、ご返信ありがとうございます。

    > アプリケーションと一緒にインストールするとは限らないのでは?と考えてこのように書きましたが、GAC の概念が廃止されていることを考えると、このシナリオは存在しないかもしれません。

    GACの概念、廃止になったのですね。恥ずかしながら知りませんでした。
    確かにGACがあれば、deps.jsonに記述が無くてもEXEは起動しそうですね。



    > 「アプリケーションプロジェクトだけコピーするようにしたい」で示したつもりでしたが、書き方を改めると「アプリケーションプロジェクトで参照し、ローカルコピーする」ということです。
    > ビルドイベントや手作業のコピーの話ではありません。

    上記、理解いたしました。


    > 「安易に使うと起動しない exe になるなら、そんな設定見せるべきじゃない」は極端じゃないですか?
    > ビルド時間短縮に効果のある技としては使えるので、わかっていて使う人が使うには良いでしょう。

    確かに早計でした。撤回します。

    (ビルド時間短縮で使ったとして、結局そのままだと
    deps.jsonに記述が無いのでEXEの起動に失敗するから
    自分で記述を追加しないといけない手間を考えると
    個人的にはやはりメリットは見えませんが…)



    だいぶ話が逸れてしまいましたが、私の3つ目の投稿の通り、
    > ローカルコピーはありにして、他のDLLやEXEを全て手動で纏める
    > 開発方針にします。
    として本件は解決済みとさせていただきます。

    何度もご回答いただきありがとうございました。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-7]



■記事リスト / ▲上のスレッド
■34616 / 親記事)  親スレッドへ処理の移譲
□投稿者/ あばば無人君 一般人(18回)-(2021/01/16(Sat) 17:02:39)
  • アイコン環境/言語:[Windows10(1909) 64bit、.Net 5.0、C#] 
    分類:[.NET] 

    いつも本掲示板でお勉強させていただいております。

    さてタイトルの件ですが、親スレッドAが居てそこから別スレッドBを
    生成→開始します。なお生成時にBに対してAのthisを渡しています。

    そしてBの処理が終了後にAから渡されたthisの関数をコールしますが
    当然その関数はBのスレッドの処理として動作します。

    これをAのスレッドとして操作させるにはどうしたらよいでしょうか?
    ちなみにGUIアプリケーションではありません。

    ご存知の方がいらっしゃいましたらぜひご教授いただきたいです。

違反を報告
引用返信

▽[全レス7件(ResNo.3-7 表示)]
■34619 / ResNo.3)  Re[3]: 親スレッドへ処理の移譲
□投稿者/ あばば無人君 一般人(21回)-(2021/01/16(Sat) 17:59:24)
  • アイコンすみません、解決済みにチェックをしていませんでした。
    今度こそ!!

解決み!
違反を報告
引用返信
■34620 / ResNo.4)  Re[3]: 親スレッドへ処理の移譲
□投稿者/ Azulean 大御所(522回)-(2021/01/16(Sat) 19:12:29)
  • アイコンNo34618に返信(あばば無人君さんの記事)
    > 私が知らないだけで、言語レベルでできないかと期待したのですが…。

    勝手に動かれたら制御しづらいだけですよ。

    GUI のメインスレッドへの Post/BeginInvoke は、イベントを抜けたあとなど、自分の制御内から抜けたときに処理されるので、自分のコードを実行中に割り込まれることがありません。

    対して、自分で作ったスレッドの場合、スレッドが生きている間は自分のコードしか実行されません。
    その状況で「言語レベルで対応」となると、「いわゆる割り込み」です。
    「このコード実行中は割り込まないで」みたいな制御を作っていくことになるので難しくなると思いますよ…。

    > 実はフレームワークを作成中で、Aの方はそのフレームワークを使う
    > 開発者側のスレッド、Bがフレームワーク側の処理、という感じです。
    > ですのでAの方には負担が無いようにしたいのです。

    それは無理だと思います。
    できたとして以下のようなことでしょう。

    <案1>
    「Application.DoEvents」のように「待っている処理があったら処理する」みたいなメソッドを提供する。

    <案2>
    スレッド A の根底のメッセージループなものを提供し、A はイベントドリブンで動くようにする。
    (スレッド A の主導権をフレームワークが握る。つまり、Windows の GUI アプリケーションと同じようなことをする)
解決み!
違反を報告
引用返信
■34621 / ResNo.5)  Re[4]: 親スレッドへ処理の移譲
□投稿者/ あばば無人君 一般人(22回)-(2021/01/20(Wed) 09:24:43)
  • アイコンAzuleanさん、ご返信ありがとうございます。

    ご回答いただいた<案2>ですが、実はスレッドAの方はその作りです。
    別装置などから送信された電文をConcurrentQueueに積んで、スレッドAで
    それを取り出して処理するといった実装です。

    そして、別装置などから想定している電文が送信されてこない場合の
    タイムアウト処理の起動をスレッドBが行っている感じです。

    やはりスレッドBがConcurrentQueueにタイムアウト用の電文を積み、
    スレッドAでそれを処理させる方法しかないのですね…。
    GUIアプリケーションのBeginInvoke的なことができないかを
    探していたのですが諦めます。

    本件はこれで解決済みとさせていただきます。
    何度も返信を下さり本当にありがとうございました。

解決み!
違反を報告
引用返信
■34629 / ResNo.6)  Re[5]: 親スレッドへ処理の移譲
□投稿者/ Azulean 大御所(524回)-(2021/01/20(Wed) 23:07:46)
  • アイコン2021/01/20(Wed) 23:12:40 編集(投稿者)

    No34621に返信(あばば無人君さんの記事)
    > ご回答いただいた<案2>ですが、実はスレッドAの方はその作りです。
    > 別装置などから送信された電文をConcurrentQueueに積んで、スレッドAで
    > それを取り出して処理するといった実装です。

    私が書いたイベントドリブンとは、スレッド A の根元のコード(ループ)をフレームワークが担う…ということです。認識が合っていればよいのですが…。
    Windows Forms でいえば、Application.Run 自体をフレームワークが作るということです。

    > GUIアプリケーションのBeginInvoke的なことができないかを
    > 探していたのですが諦めます。

    BeginInvoke の実態は「実行予定のキューに追加し、ウィンドウメッセージを飛ばして通知する」です。
    そして、Application.Run の中のメッセージループがそのウィンドウメッセージを取り出した際に、キューに積まれているデリゲートを実行します。

    (Application.Run イメージ)
    while (true)
    {
    // 新規メッセージ取り出し (メッセージがないなら取り出せるまで待つ)

    // メッセージを Form や Control に割り振り、Form や Control がイベントを発行する
    // ただし、そのメッセージがBeginInvoke/Invokeのものであれば、キューを確認してデリゲートを実行する

    // 次のメッセージを待つため、ループを繰り返す
    }
    -----

    このため、言語的に実現しているものではなく、Windows Forms というフレームワークが実現しているものです。

    同じようなものを求めるなら、スレッド A の根底となる処理(ループ)をあなたのフレームワークで提供するしかないです。

    ※認識がずれている可能性があったので返信した次第ですので、認識が合っていれば、返信は不要です。
解決み!
違反を報告
引用返信
■34631 / ResNo.7)  Re[6]: 親スレッドへ処理の移譲
□投稿者/ あばば無人君 一般人(23回)-(2021/01/21(Thu) 10:09:51)
  • アイコンAzuleanさん、ご返信ありがとうございます。

    > ※認識がずれている可能性があったので返信した次第ですので、認識が合っていれば、返信は不要です。

    認識ずれの配慮、ありがとうございます。

    ちゃんと意図が伝わるか不安だったので投稿の説明を
    シンプルにしたつもりでしたが、それが良くなかったです。
    正確に記載します。

    まずスレッドAと記載していたものですが、こちらは開発者のクラスが
    フレームワーク内のクラス(抽象)を継承しており、その親クラスの挙動が
    Azuleanさんが記載したwhile文の様な挙動をしております。

    親クラスを一部抜粋
    public abstract class ParentClass
    {
      public BlockingCollection<MessageData> que =
                 new BlockingCollection<MessageData>();

      void MainLoop()
      {
        while
        {
          MessageData data;
          que.TryTake(out data, Timeout.Infinite)

          this.MessageReceive(data);
        }
      }

      internal abstract void MessageReceive(MessageData data);
    }

    開発者は上記のMessageReceiveをオーバーライドして処理を実装しており
    その処理中で次電文の受信待ちタイマーを張るのですが、そのタイマーが
    スレッドBと記載していた物です。

    次電文を時間内に受信できなかった時にスレッドBはタイムアウト処理として
    スレッドAが渡したthisにある関数をコールしている、という動きです。
    これをスレッドAの処理として動かしたかったというのが目的でした。

    上記の通りAzuleanさんが記載して下さった様な挙動となっていますので
    認識ずれは無いかと思います。
    開発者側にはMessageReceive関数の中でタイムアウトの処理を実装させる
    ルールとします。

    何度も丁寧に説明していただき本当にありがとうございました。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-7]






Mode/  Pass/


- Child Tree -