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

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

記事リスト ( )内の数字はレス数
Nomalシステム時計の設定(3) | NomalSeleniumで開いているページのTableを編集したい(5) | Nomalソケット通信入門 ひらがな(4) | NomalVisual Basicでエラーが出る(3) | Nomalインストーラにて、ローミングフォルダにファイルを配置したい(0) | NomalRGB値の所得(2) | Nomal時間変数(文字列)の扱い(4) | NomalVB.net からAccessDBへの接続(2) | Nomal画像のスクロール(6) | Nomalタイマーの一括処理(6) | NomalTreeViewとDataGridViewのスクロールを同期(シンクロ)させたい(4) | NomalTreeViewの現在位置とDataGridViewの現在位置を合わせたい(7) | NomalPictureBoxの画像を連続保存(11) | NomalDataGridViewの特定セルにボタンを配置する方法(5) | Nomalフォームのリサイズ時にDataGridViewが再描画されない(4) | NomalテキストボックスのValidatingイベントよりも先に発生するボタン発生イベントは何でしょう?(2) | NomalPDFをフォーム上で表示させる方法につきまして(4) | NomalDataGridViewの行ヘッダーに行番号を表示した時のエラー(4) | Nomal継承元フォームで各フォームのボタン動作を検知したい(3) | Nomalラジオボタンの一括設定(7) | NomalWindowsエクスプローラからのドラッグ&ドロップ(2) | NomalRichTextBoxのテキストをpictureBOXへ(12) | Nomalクリックイベントでexeを作成できるか(2) | Nomal作成した白黒画像をWordに貼り付けてから「図として保存」(8) | Nomalアセンブリ情報が載らない(1) | Nomal先頭に空白(スペース)があるファイルを読み込んでRichTextBoxへ書き出すとスペースが削除える(6) | Nomalc#で日付型の定義の仕方で質問があります。(2) | NomalExcel Com オブジェクトの増殖(13) | Nomal二次元マップから値の取得(1) | NomalアプリでHDMIへ出す解像度を変えたい(4) | Nomal列車の時間ごとの位置情報を表示したいです。(2) | Nomal画像の中心を基点に回転(4) | NomalDataGridViewのドロップダウンリストの表示と選択後の値を分けたい(1) | NomalVB.NetでVB6.0と同じFontを指定しても同様に印刷されない(9) | NomalタッチキーボードでIMEを自動で切替えたい(6) | NomalVSTOによるエクセルアドインのインストーラーでのアップデート(1) | NomalMP4動画を再生する方法について(5) | NomalUrlにアクセスするとダウンロードされるファイルを捕まえる(2) | NomalLableのカラー色を文字変数から変更したい(5) | NomalLabelで文字単位の背景色(7) | NomalTEXTBOXのプロパティを文字列に(7) | Nomalタブレット等でスワイプによるスクロールを実装(2) | NomalPDFをフォーム上で表示させる方法につきまして(6) | NomalChart X軸上の描画を切り替えたい(0) | NomalRichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い(3) | Nomal特定のPCだけ発生する「パディングは無効なので削除できません」のエラーの原因(6) | NomalASP.NET WebApi内でXmlReader.Create(url)がタイムアウトする(4) | NomalDatagridViewでファンクションキーを止めたい(5) | Nomal表示動作が重くなる(3) | Nomalbitmapを複数スレッドで処理したい(2) | NomalLoadOptionのパラメータの意味(3) | Nomalフォーム背景のみを半透明にしたい(5) | Nomal読み出し元フォームの位置取得方法(2) | Nomalコンストラクターに続く{}の意味(2) | Nomal1行で書くことできますか?(3) | NomalCommandBuilderによって作られるCommandTextの内容(5) | Nomalvb.netで7zの圧縮・解凍をしたい。(2) | NomalC# NASでのプログレスバー有りのコピー(0) | Nomal正規表現で文字の繰り返しパターン(4) | NomalDataViewのFindRowsde(7) | NomalNPOIでのエクセル編集で期待通りに書き込めません(2) | NomalDataGridのSetDataBindingに代わるもの?(3) | NomalFormのサイズ変更で掴める辺を制限したい(2) | NomalVSTOとWebView2の共存って可能?(3) | Nomalビデオ圧縮のコーデック(2) | NomalWindowsMediaPlayerで次のURLを指定しても反映されない。(3) | Nomal"−"を縦書きにしたい(9) | Nomal.NET6.0 のWinFormにWPFのユーザーコントロールを配置したい(4) | NomalDataGridViewの列にコンボボックスを表示する(2) | Nomalデータグリッドビューの特定の列ヘッダの色(2) | NomalVB-Report10→11への移行(4) | Nomal入力値を元に描画させたい(2) | Nomalデフォルトプリンタの用紙向き変更(0) | NomalpictureBoxとlabelの重ね合わせ(2) | NomalASP.net デバッグ時の .js ファイルの変更が反映されない(1) | NomalVBで開いたExcelでのイベントを取得するには(4) | NomalWindowsエクスプローラへのドロップ先フォルダの取得(4) | NomalデザイナでSystemColorsのような色一覧から選択できるようにしたい(0) | NomalVisualStudio2019 以降の検索ダイアログが正常に動作しない(2) | NomalTaskの入れ子の待ち方2(4) | NomalTaskの入れ子の待ち方(5) | NomalUsingの使い方が間違っている?(4) | Nomal//./の意味は?(2) | Nomalバイナリーファイルの結合と分解(2) | Nomal表の最後の行の下にDropできない(1) | NomalCookieの勉強を始めました。(2) | Nomal複数のPageに分かれる場合のスクレ―ピング(6) | NomalDataGridViewのセル結合部分にボタンを表示する方法(2) | NomalTask.Runの使い方(4) | Nomalランダムファイルを高速化させたい(5) | NomalPictureBox のサイズを設定する(2) | NomalProcessクラスMainModuleプロパティでアクセス拒否(3) | NomalLINQでControlsをEnable=Falseに設定(3) | Nomalプロセス間の通信(相互)(2) | NomalC#をVBに変換する方法が分かりません(1) | NomalPictureBoxに動的に画像を表示する(1) | NomalYahooのHPで、検索文字の入力ができない(3) | NomalWebView2のEncodeの問題?(5) | NomalWinFormでChromeをSeleriumで操作しているが、Closeの仕方(2) |



■記事リスト / ▼下のスレッド
■34967 / 親記事)  Cookieの勉強を始めました。
□投稿者/ Wan 一般人(48回)-(2021/11/21(Sun) 14:14:56)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    (質問1)
    Cookieが、サーバからのSet-cookieで送られてきたものを、Webブラウザーで、所定のフォルダー(・・・・\User Data\Default)内に、Cookieというファイル名で、QSLiteデータベースで保存されていることまで調べました。しかし、DB Browse(SQLite)などでデータを見ると、 名前、コンテンツ、ドメイン、パス、送信、スクリプトにアクセス可能、作成済み、有効期限の内、一部の平文が見当たらりません。どうも?暗号化されているようですが、平文に戻す方法ってあるのでしょうか?それとも、別のファイルに保存されているのでしょうか?ブラウザーの設定で見ると、暗号を解除して平文化されているので、何らかの手段で変換しているのかな?と推測しています。
    (質問2)
    サーバから送られてくるSet-cookieのタイミングについてです。ブラウザーの設定で、Dobon.netのCookiesを削除して、Dobon.netにアクセスした場合の要求ヘッダーには、当然Cookieは含まれていません。これは、開発者ツールのネットワークでdobon.netのファイルを選択してヘッダーを選択して確認しています。ところが、応答ヘッダーにSet-cookieの文が存在しません。もう一度、Dobon.netにアクセスすると要求ヘッダーにCookieが含まれています。どこかで、Set-cookieの指示があったと思うのですが、そのファイルをみつけることができません。どのようにすれば、見つけることが出来るのでしょうか?
    詳しい方、ご指南のほど、よろしくお願い致します。

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34969 / ResNo.1)  Re[1]: Cookieの勉強を始めました。
□投稿者/ Hongliang 大御所(612回)-(2021/11/21(Sun) 14:51:37)
  • アイコンCookieをローカルにどう保存するかは、保存するアプリケーション次第なので、使用されているブラウザが分からないと回答できません。
    Chromium系のブラウザであれば以下のような仕組みで暗号化されています。
    https://qiita.com/taizan_hokuto/items/bff1a1ccd65655e1c386
    .NETにおいては、System.Security.Cryptography名前空間に暗号系のライブラリが用意されています。
    DPAPIはProtectedDataクラス、AES-GCMはAesGcmクラスが対応しています。
    といってもAesGcmは.NET Frameworkではサポートされていないようので、その場合どうするのかは存じません。

    DOBON.NETがどうやってるかは知りませんが、例えばJavaScriptからでもCookieは設定できたりします。
違反を報告
引用返信
■34970 / ResNo.2)  Re[2]: Cookieの勉強を始めました。
□投稿者/ wan 一般人(3回)-(2021/11/21(Sun) 20:15:54)
  • アイコンHongliang様
    早速のご指南有難う御座います。
    大変助かりました。
    Set-cookieの件は、Set-cookieに書かれている内容がそのままSQLiteファイルに書かれているのか?を確認しておこうという意味で質問させて頂きました。
    JavaScriptからでも書けるんですね。深堀してみます。
    何か?検索するツールがあるのかな?って思ったのですが、無いようなのでネットワークをもう少し調べてみます。
    また、暗号の件は、セキュリティの関係上暗号化されているの理解しました。また、頑張れば、復号も可能であることも理解しました。
    もう少し先の話になると思いますが、サーバー側の勉強も始めたいと思います。
    本当に、いつも助かります。有難う御座いました。

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

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34953 / 親記事)  複数のPageに分かれる場合のスクレ―ピング
□投稿者/ Wan 一般人(45回)-(2021/11/13(Sat) 17:08:43)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    Webで複数のPageに分かれたデータをWebClientを使用してデータを取得して、それぞれのPage数と合致したTextBox.Nameに表示しようとしています。(今回は、階層的にtaxtBoxのControlが配置しているので、子も検索するコードになっています)I/O待ちが主体の処理なので、Parallelで回すのでは無く、WebClient.OpenReadAsyncで処理するのが最適と思い次のようなコードを書きました。
    Public Class Form1
        Private Sub onBinaryLoad(ByVal sender As Object, ByVal e As OpenReadCompletedEventArgs)
            If Not (e.[Error] IsNot Nothing) OrElse (e.Cancelled) Then
                DirectCast(Me.Controls.Find("TextBox" & e.UserState, True).First, TextBox).Text = New StreamReader(e.Result).ReadToEnd
            End If
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim 変数Max As Integer = 16
            For i = 1 To 変数Max
                Dim TmpWc = New WebClient
                AddHandler TmpWc.OpenReadCompleted, AddressOf onBinaryLoad
                TmpWc.OpenReadAsync(New Uri("https://XXXX&page=" & i), i)
            Next
        End Sub
    End Class
    提示したコードでは、Page数が16と限定していますが、実際は、不定です。
    
    不定数となる全てのPageの読み込みが完了した判断は、どのように行えば宜しいのでしょうか?
    詳しい方、いらっしゃいましたらご指南宜しくお願い致します。
    
    

違反を報告
引用返信

▽[全レス6件(ResNo.2-6 表示)]
■34955 / ResNo.2)  Re[2]: 複数のPageに分かれる場合のスクレ―ピング
□投稿者/ Wan 一般人(46回)-(2021/11/13(Sat) 22:47:00)
  • アイコン早速の御指南有難うございます!
    文章力が無く、質問の本質を伝えられず、お手数をお掛けして申し訳ありません!最大ページ数の取得方法の質問では無く、最大ページ数が、仮に16とした場合のコードを示したつもりでしたが、ベテラン様から見ると、最大ページ数の取得方法についての質問に見えると言う事は、プログラミングとしてでは無い意味で勉強になります!最大ページ数は、把握出来る環境にあります!webclientの非同期を実行した時に、コンプリートイベントが、複数発行される場合、全ての非同期処理が、全て完了した事を把握する事は出来ますか?
    仮に、最大ページ数が、16だった場合にどの様に全ての非同期処理が完了した事をが検出出来るのか?御指南頂ければ幸いです!
    文章力が無い為、意図が伝わらないかも?
    また、英単語のカタカナ表記については、発音の関係上、厳密な表記は不可能な事から、日本人ならこの程度は、伝わるだろうと、相手の事を考えずに書いた事をお詫び致します!
    なんだか?本質を外れたやり取りになってしまった気もしますが、お気を悪くなされる事が無い事を節に願います!


違反を報告
引用返信
■34956 / ResNo.3)  Re[3]: 複数のPageに分かれる場合のスクレ―ピング
□投稿者/ Wan 一般人(47回)-(2021/11/14(Sun) 11:58:44)
  • アイコン
    次のようなコードで自己解決しました。
    お騒がせしてすみませんでした。
      Private Sub onBinaryLoad(ByVal sender As Object, ByVal e As OpenReadCompletedEventArgs)
            If Not (e.[Error] IsNot Nothing) OrElse (e.Cancelled) Then
                DirectCast(Me.Controls.Find("TextBox" & e.UserState, True).First, TextBox).Text = New StreamReader(e.Result).ReadToEnd
            End If
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ServicePointManager.DefaultConnectionLimit = 8
            Dim 変数Max As Integer = 16
            Dim WcList As New List(Of WebClient)
            For i = 1 To 変数Max
                Dim TmpWc = New WebClient
                WcList.Add(TmpWc)
                AddHandler TmpWc.OpenReadCompleted, AddressOf onBinaryLoad
                TmpWc.OpenReadAsync(New Uri("https:XXXX&page=" & i), i)
            Next
            Do
                Application.DoEvents()
            Loop Until WcList.All(Function(n) n.IsBusy = False)
        End Sub

解決み!
違反を報告
引用返信
■34957 / ResNo.4)  Re[4]: 複数のPageに分かれる場合のスクレ―ピング
□投稿者/ 魔界の仮面弁士 大御所(1408回)-(2021/11/15(Mon) 11:28:52)
  • アイコンNo34956に返信(Wanさんの記事)
    > Dim TmpWc = New WebClient

    WebClient は幾つかの理由により、現在は非推奨なクラスとなっています。
    https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient?view=netframework-4.8
    https://docs.microsoft.com/ja-jp/dotnet/core/compatibility/networking/6.0/webrequest-deprecated

    >> Important
    >> We don't recommend that you use the WebClient class for new development. Instead, use the System.Net.Http.HttpClient class.

    代わりに HttpClient を使えば、Task ベースの非同期実装を利用できるので、
    WhenAll を使って「全てのページが終わった後」の処理を簡単に書けます。


    取りあえず今回は WebClient で行くとして…。


    > If Not (e.[Error] IsNot Nothing) OrElse (e.Cancelled) Then
    二重否定文になっていますので、打ち消して
    「If e.Error Is Nothing OrElse e.Cancelled Then」
    と書いた方が素直だと思います。

    でも、この判定処理はそもそもおかしく無いでしょうか。もしかして、
    「If Not (e.Error IsNot Nothing OrElse e.Cancelled) Then」あるいは
    「If e.Error IsNot Nothing AndAlso Not e.Cancelled Then」と書きたかったのでは?


    > Do
    >  Application.DoEvents()
    > Loop Until WcList.All(Function(n) n.IsBusy = False)
    これだと、ループ中に再度ボタンが押されてしまうこともありそうです。

    なによりも、「イベント通知型」の非同期実装であるにもかかわらず、
    それをループ待機してしまっては台無しです。

    ループ待機で「Loop Unitil 最後のページのイベント処理が完了した時」とするのではなく、
    OpenReadCompleted イベントのハンドラーである onBinaryLoad にて、
      If 最後のページのイベント処理が完了した時 Then
        '全て完了した時に動作させたい処理
      End If
    のように実装するようにして、Button1 そのものは
    ループ待機せず、そのまま End Sub に向かって抜けてしまうようにします。


    今回の場合、OpenReadAsync 時に UserToken として 1〜16 の固有値を
    渡しているわけですから、onBinaryLoad 側では CInt(e.UserState) を通じて
    何ページ目のロードが完了したのかも分かるはずですよね。
解決み!
違反を報告
引用返信
■34958 / ResNo.5)  Re[5]: 複数のPageに分かれる場合のスクレ―ピング
□投稿者/ 魔界の仮面弁士 大御所(1409回)-(2021/11/16(Tue) 10:49:26)
  • アイコンNo34957に追記(魔界の仮面弁士の記事)
    > WebClient は幾つかの理由により、現在は非推奨なクラスとなっています。
    > 代わりに HttpClient を使えば、Task ベースの非同期実装を利用できるので、
    > WhenAll を使って「全てのページが終わった後」の処理を簡単に書けます。

    HttpClient + WhenAll のサンプルです。

    "cbbs.cgi?page=-20" 〜 "cbbs.cgi?page=80" までの 6 ページを読み込むので
    Multiline = True な TextBox を 6 個と Button1 を用意してください。


    Option Strict On
    Imports System.Net.Http
    Public Class Form1
      Private textBoxes As New List(Of TextBox)()

      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        textBoxes.AddRange({TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6})
      End Sub

      Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Button1.Enabled = False

        Dim queue As New List(Of Task)()
        For p = 0 To 5
          Dim url = $"https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?page={20 * (p - 1)}&H=F&no=0"
          Dim txt = textBoxes(p)
          Dim http As New HttpClient()
          queue.Add(http.GetStringAsync(url).ContinueWith(
            Sub(html) txt.Text = $"{url}{vbCrLf}{html.Result}",
            TaskScheduler.FromCurrentSynchronizationContext()))
        Next
        Await Task.WhenAll(queue)

        Button1.Enabled = True
      End Sub
    End Class
違反を報告
引用返信
■34968 / ResNo.6)  Re[6]: 複数のPageに分かれる場合のスクレ―ピング
□投稿者/ Wan 一般人(49回)-(2021/11/21(Sun) 14:22:24)
  • アイコン追加で、丁寧なご説明ありがとうございます。
    継続タスク、スケジュールなどの要素が含まれており物凄く勉強になりました。
    なんとなくですが、Taskという考え方、HttpClientが4.5から追加されて意味が見えてきたような気がしています。
    非同期処理は、始めたばかりなのでわからないことだらけで、くだらない質問ばかりで申し訳ありません。
    本当に有難うございました
解決み!
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34959 / 親記事)  DataGridViewのセル結合部分にボタンを表示する方法
□投稿者/ り 一般人(1回)-(2021/11/16(Tue) 12:03:00)
  • アイコン環境/言語:[C#] 
    分類:[.NET] 

    2023/01/06(Fri) 13:26:33 編集(投稿者)

    初めて投稿させていただきます。

    タイトルの通りの内容ですが、
    CellPaintハンドラでセルを結合しているように表示させて、
    結合したセルの中にボタンを配置したいのですが、

    現在のソースは、DBからデータを抽出してDataGridViewに表示しようとしているので、
    DataGridView.DataSouced = dt;
    でデータを格納し、そのあとにCellPaintが動く形で記述しています。

    しかし、それだとボタンがTextの形で表示されてしまいボタンとしての機能が
    失われていしまいます。

    どうにかいい方法はないでしょうか...
    添付のようにしたいです。

違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34960 / ResNo.1)  Re[1]: DataGridViewのセル結合部分にボタンを表示する方法
□投稿者/ 魔界の仮面弁士 大御所(1410回)-(2021/11/16(Tue) 13:04:37)
  • アイコンNo34959に返信(りさんの記事)
    > でデータを格納し、そのあとにCellPaintが動く形で記述しています。
    描画先となる該当セルのインスタンスは、どのようなデータ型にしていますか?

    DataGridViewButtonCell あるいはその継承クラスなのか、
    DataGridViewTextBoxCell あるいはその継承クラスなのか、
    それとも素の DataGridViewCell クラスから実装しているのか。


    > しかし、それだとボタンがTextの形で表示されてしまい
    どういうコードを書いているのか、一切の説明が無いので
    状況が分からないです。

    ボタンセルということは、そもそもユーザーによる編集は
    不要なのですから、Text を選択できるようにしておく必要もないのですよね。

    > ボタンとしての機能が失われていしまいます。
    具体的には、どういう結果を期待しているのに、
    実際にはどうなってしまうのでしょうか?
違反を報告
引用返信
■34961 / ResNo.2)  Re[2]: DataGridViewのセル結合部分にボタンを表示する方法
□投稿者/ り 一般人(2回)-(2021/11/16(Tue) 13:31:41)
  • アイコンNo34960に返信(魔界の仮面弁士さんの記事)

    迅速に回答くださりありがとうございます!
    説明不足ですみません。

    > ■No34959に返信(りさんの記事)
    >>でデータを格納し、そのあとにCellPaintが動く形で記述しています。
    > 描画先となる該当セルのインスタンスは、どのようなデータ型にしていますか?
    >
    > DataGridViewButtonCell あるいはその継承クラスなのか、
    > DataGridViewTextBoxCell あるいはその継承クラスなのか、
    > それとも素の DataGridViewCell クラスから実装しているのか。

    DataGridViewButtonCellで実装しようとしています。

    >
    >
    >>しかし、それだとボタンがTextの形で表示されてしまい
    > どういうコードを書いているのか、一切の説明が無いので
    > 状況が分からないです。
    > ボタンセルということは、そもそもユーザーによる編集は
    > 不要なのですから、Text を選択できるようにしておく必要もないのですよね。

    コードは次に記載します。

    >>ボタンとしての機能が失われていしまいます。
    > 具体的には、どういう結果を期待しているのに、
    > 実際にはどうなってしまうのでしょうか?



    実装したいイメージは先ほど挙げている通りですが、
    現状は今回添付したファイルのようになります。

570×335 => 250×146
イメージ
1637037101.png
/6KB
違反を報告
引用返信

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



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34948 / 親記事)  Task.Runの使い方
□投稿者/ Wan 一般人(43回)-(2021/11/11(Thu) 14:21:02)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net WindowsForm] 
    分類:[.NET] 

    Task.Runについて勉強を始めました。
    Task.Runメソッドのオーバーロードとして
    Run<TResult>(Func<Task<TResult>>)
    のパターンのサンプルを作成しようと、次の様なコードを考えたのですが、
    返値(“終わり”)の取得方法が分かりません。
    
    Dim proc_inl =
    Async Function()
           Await Task.Delay(500) '0.5秒待つ
           Debug.Print("Task")
           Return "終わり"
        End Function
    Await Task.Run(proc_inl) &#8656;Runにカーソルを合わせると
    '*** ここで、「終わり」を取得したい ***
    
    上記のコードでRunの部分にカーソルを合わせると、次のように表示されるので
    Public Shared Function Run(Of TResult)(function As Func(Of Task(Of TResult))) As Task(Of TResult)
    
    Run<TResult>(Func<Task<TResult>>)の形になっていると思います。
    
    また、Async Function()としないと、Run<TResult>(Func<Task<TResult>>)の形にできないのでしょうか?※外して色々こねくり回してみましたが、上手く行きません。
    次のように変更すると、Run<TResult>(Func<TResult>)の形になってしまいます。
    Dim Tasks = Task.Run(
    Function() As String
            Debug.Print("Task")
            Return "終わり"
    End Function)
    Debug.Print(Tasks.Result)
    
    詳しい方、ご指南頂けないでしょうか?
    教えて頂きたい内容が上手く伝えられていないような気がしますが、宜しくお願い致します。
    

違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34949 / ResNo.1)  Re[1]: Task.Runの使い方
□投稿者/ Hongliang 大御所(610回)-(2021/11/11(Thu) 17:45:14)
  • アイコン> Await Task.Run(proc_inl) &#8656;Runにカーソルを合わせると
    > '*** ここで、「終わり」を取得したい ***

    Task(Of T)の返値は、Await演算子により取得できます。
    Dim ret = Await Task.Run(proc_inl)

    > また、Async Function()としないと、Run<TResult>(Func<Task<TResult>>)の形に
    > できないのでしょうか?※外して色々こねくり回してみましたが、上手く行きません。

    とりあえずTask.Runのところからは消してみました。
    ' Private Shared http As New HttpClient()

    ' HttpClient::GetStringAsyncの返値はTask(Of String)なので、
    ' それを返すラムダ式はFunc(Of Task(Of String))になる
    Dim ret = Await Task.Run(Function()
    Retrun http.GetStringAsync("https://example.com/")
    End Function)

    まあ実用上はAsync/Awaitが入ってくるのが普通かなと思います。
    GetStringAsyncをAwaitした結果を解析するとか。
違反を報告
引用返信
■34950 / ResNo.2)  Re[2]: Task.Runの使い方
□投稿者/ Wan 一般人(44回)-(2021/11/12(Fri) 11:45:58)
  • アイコン
    Hongliang 様
    ご指南有難う御座います。
    取得できました。
    
    ところが・・・
    別スレッドで動いていると思っていたのですが、IDをとったところ
    Nothingとなってしまいます。
    パターンA
     Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            'Run(Func<Task>)
            'Public Shared Function Run(function As Func(Of Task)) As Task
            '↓Dim proc_inl As Func(Of Task)
            Dim proc_inl =
                Async Function()
                    Await Task.Delay(100) '0.5秒待つ
                    Debug.Print($"別TaskA:{Task.CurrentId}")
                End Function
            Await Task.Run(proc_inl)
        End Sub
    
    パターンC
      Private Async Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
            'Run<TResult>(Func<Task<TResult>>)
            'Public Shared Function Run(Of TResult)(function As Func(Of Task(Of TResult))) As Task(Of TResult)
            '↓Dim proc_inl As Func(Of Task(Of String))
            Dim proc_inl =
                Async Function()
                    Await Task.Delay(100) '0.5秒待つ
                    Debug.Print($"別TaskC:{Task.CurrentId}")
                    Return "終わりC"
                End Function
            Debug.Print(Await Task.Run(proc_inl))
        End Sub
    
    また、パターンBの場合は、別スレッドとなりますが、Await Task.Runが使えないようです。
       Private Async Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            'Run<TResult>(Func<TResult>)
            'Public Shared Function Run(Of TResult) (function As Func(Of TResult)) As Task(Of TResult)
            '↓ Dim Tasks As Task(Of String)
            Dim proc_inl = New Task(Of String)(
               Function() As String
                   Task.Delay(100) '0.5秒待つ
                   Debug.Print($"別TaskB:{Task.CurrentId}")
                   Return "終わりB"
               End Function)
            proc_inl.Start()
            Debug.Print(Await proc_inl) 'Resultは、内部的にAwaitを呼び出している
        End Sub

違反を報告
引用返信
■34951 / ResNo.3)  Re[3]: Task.Runの使い方
□投稿者/ Hongliang 大御所(611回)-(2021/11/12(Fri) 18:41:54)
  • アイコンTask上で動いていることと、別スレッドで動いていることは別のことです。
    どのスレッドで動いているか確認したい場合、Thread.CurrentThread.ManagedThreadIdを使用してください。

    あまり突っ込んで考えたことはありませんが、おそらくAwait以降の処理はTaskから離れてスレッドプール上で動く単なるデリゲートという感じなのでしょうね、多分。
違反を報告
引用返信
■34952 / ResNo.4)  Re[4]: Task.Runの使い方
□投稿者/ wan 一般人(2回)-(2021/11/13(Sat) 06:22:25)
  • アイコン御指南有難うございます!
    色々と自分なりにこねくり回してみます!
    また、詰まったらヒントを頂きに来ますので、宜しくお願い致します

    ありがとうございました
解決み!
違反を報告
引用返信

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



■記事リスト / ▲上のスレッド
■34931 / 親記事)  ランダムファイルを高速化させたい
□投稿者/ K 一般人(1回)-(2021/10/05(Tue) 10:09:31)
  • アイコン環境/言語:[Windows10 VisualStudio2019 VB.net] 
    分類:[.NET] 

    今までVB6を扱っていたのですが、.Netに移行していこうとしてます。
    基本的にデータの保存は、ランダムファイルを使用していたのですが、VB6では20msで処理を終えていた内容が.Netでは300msかかる事がわかりました。
    VB6の互換だから遅くなるのはわかるのですが、.Netについて色々調べた結果、固定長の概念がないとの事でした。
    ランダムファイルを使用している理由は、指定したポイントをすぐに読書したいからです。
    ランダムファイルに保存している構造体は、
    'データの構造体定義
    Public Structure Dat
    <VBFixedString(19)> Public ABC As String
    <VBFixedArray(1400)> Public DEF() As Single
    End Structure

      Public Dat1(90000) As DAT

    です。

    読込の量ですが上記の構造体を10000データ程、500msに一回読み込んでいます。
    他の処理もあり、読書が早くなればいいのですが。

    .Netでも高速でかつランダムファイルのように、指定したポイントを読書できるような方法はないのでしょうか。
    色々調べましたが、.Netの知識もあまりなく、困っております。

    ご教授ください。
    よろしくお願いします。

違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■34932 / ResNo.1)  Re[1]: ランダムファイルを高速化させたい
□投稿者/ hihijiji 一般人(1回)-(2021/10/05(Tue) 11:15:20)
  • アイコンMemoryMappedFile クラスは如何ですか?
    https://docs.microsoft.com/ja-jp/dotnet/api/system.io.memorymappedfiles.memorymappedfile?view=net-5.0
違反を報告
引用返信
■34933 / ResNo.2)  Re[2]: ランダムファイルを高速化させたい
□投稿者/ K 一般人(3回)-(2021/10/05(Tue) 13:31:32)
  • アイコン初めて聞く内容なので、調べてみます。
    ありがとうございます。
違反を報告
引用返信
■34934 / ResNo.3)  Re[3]: ランダムファイルを高速化させたい
□投稿者/ K 一般人(4回)-(2021/10/05(Tue) 15:06:23)
  • アイコンMemoryMappedFile クラスについて調べてみましたが、
    結局いまいちわかりませんでした。
    書き込みは速度的に問題ないので、通常通りランダムファイルで書き込み
    読み込みはMemoryMappedFileクラスを利用できるのでしょうか。
違反を報告
引用返信
■34946 / ResNo.4)  Re[4]: ランダムファイルを高速化させたい
□投稿者/ hihijiji 一般人(2回)-(2021/10/29(Fri) 11:56:19)
  • アイコン遅レスになりましたが、もちろん可能です。

    ただしMemoryMappedFileクラスのみで読み書きする場合に比べて
    難易度は約3倍(当社比)になります。
違反を報告
引用返信
■34947 / ResNo.5)  Re[5]: ランダムファイルを高速化させたい
□投稿者/ K 一般人(6回)-(2021/11/08(Mon) 10:42:32)
  • アイコンありがとうございます。
    とりあえず別の方法で対応する事になりました。
解決み!
違反を報告
引用返信

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






Mode/  Pass/


- Child Tree -

2023/03/31(Fri) 06:40:12 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする