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

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

C# と VB.NET の入門サイト

Re[3]: C#のサンプルをVB.NETへ変換


(過去ログ 72 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■41754 / inTopicNo.1)  C#のサンプルをVB.NETへ変換
  
□投稿者/ 明日はメッシ (1回)-(2009/09/29(Tue) 23:13:07)

分類:[.NET 全般] 

以下のURLを参考に
http://blogs.wankuma.com/jitta/articles/19448.aspx

VB.NETに変換してみたのですが、
☆の部分がコンパイルエラーになってしまい。
☆☆の部分では記載方法が理解できていない状態で困っています。
対応方法が判る方、教えていただけると助かります。

もう一点ですが

サンプルが正しいものとすると
「長い処理を開始する画面」の 「← 1」 と
「お待ちください画面」の 「← 2」が違う画面なのに連動できる
理由が理解でできません。

素人的な質問で理解しにくいかと思いますが
よろしくお願いします。


以下、サンプルをVB.NETに置き換えた物です。

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

'長い処理をするクラス。ここでは LongLongWait
'クラスとして、指定された回数、1秒スリープを実行しています。

Imports System.Threading
Public NotInheritable Class LongLongWaiting
Private ReadOnly _waitSec As Long
Private _progress As String
Private _thread As Thread
'''
''' 指定時間待機する処理を行うクラスのコンストラクタです。
'''
''' 待機する秒数
Public Sub New(ByVal waitSec As Long)
Me._waitSec = waitSec
Me._progress = String.Empty
Me._thread = Nothing
End Sub
'''
''' 進捗状況を現す文字列を取得します。
'''
Public ReadOnly Property Progress() As String
Get
Return Me._progress
End Get
End Property
'''
''' 実行中かどうかを検査します。
'''
Public ReadOnly Property IsRunning() As Boolean
Get
Return (Me._thread IsNot Nothing)
End Get
End Property
'''
''' 指定時間待つ動作を開始します。
'''
Public Sub wait()
Me.wait("")
End Sub
'''
''' 指定時間待つ動作を開始します。
'''
''' スレッドに付ける名前を指定します。
Public Sub wait(ByVal threadName As String)
If Me._thread Is Nothing Then
Me._thread = New Thread(New ThreadStart(Me.execute))
Me._thread.Name = threadName
Me._progress = String.Empty
Me._thread.Start()
End If
End Sub
'''
''' スレッドにて行われる、実際の処理です。
'''
Private Sub execute()
Try
For sec As Long = 0 To Me._waitSec - 1
System.Threading.Thread.Sleep(1000)
Me._progress = String.Format("{0}/{1} 経過", sec + 1, Me._waitSec)
Next
Catch e As Exception
Me._progress = e.Message
Finally
Me._thread = Nothing
End Try
End Sub
End Class


「長い処理を開始する画面」。
ここでは、以下のコントロールがあることを前提とします。

待機する秒数を入力する、TextBox
ポストバックを発生させるための、Button

サーバコード


Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim wait As New LongLongWaiting(Long.Parse(Me.TextBox1.Text))  ← 1
☆Stocker.Add(Me.Session.SessionID, wait)
wait.wait(Me.Session.SessionID)
Response.Redirect("「お待ちください」")
end sub



「お待ちください画面」。ここでは経過を示す文字列を表示するようにしています。
また、最初の画面に戻る為にボタンを用意しています。
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
☆Dim w As LongLongWaiting = TryCast(Stocker.GetValue(Me.Session.SessionID), LongLongWaiting)  ← 2
If w Is Nothing Then
Me.Response.Redirect(エラー画面など)
End If
If w.IsRunning Then
Me.Response.AddHeader("refresh", "2")
Me.Label1.Text = w.Progress
Me.Button1.Enabled = False
Else
Me.Label1.Text = "終了しました。"
☆Stocker.Remove(Me.Session.SessionID)
Me.Button1.Enabled = True
End If
End Sub


☆☆
'''
''' 結果を格納します。
'''
Imports System.Collections;
Public NotInheritable Class Stocker
End Class
引用返信 編集キー/
■41757 / inTopicNo.2)  Re[1]: C#のサンプルをVB.NETへ変換
□投稿者/ やじゅ (1349回)-(2009/09/29(Tue) 23:51:05)
やじゅ さんの Web サイト
No41754 (明日はメッシ さん) に返信
> ☆の部分がコンパイルエラーになってしまい。

アプリケーション内で利用する共通のクラスを作成する方法
共通のデータアクセス ルーチンや、よく利用するアルゴリズムを、
App_Code フォルダ内にクラスとして用意しておけば、特別な手続きなしにどのページからもアクセスできます。
http://msdn.microsoft.com/ja-jp/library/cc719212.aspx

LongLongWaiting.vb、Stocker.vb
引用返信 編集キー/
■41761 / inTopicNo.3)  Re[2]: C#のサンプルをVB.NETへ変換
□投稿者/ 明日はメッシ (3回)-(2009/09/30(Wed) 00:30:05)
No41757 (やじゅ さん) に返信

返信ありがとうございます。


http://msdn.microsoft.com/ja-jp/library/cc719212.aspx

を見させていただきました。

App_Codeで記載すれば良いのは理解できたのですが

上記URLの「(4) [曜日を求める] ボタンのクリックハンドラを記述」ですが
単一画面で完結している為、私が記述した

@ Dim wait As New LongLongWaiting(Long.Parse(Me.TextBox1.Text))  ← 1



A ☆Dim w As LongLongWaiting = TryCast(Stocker.GetValue(Me.Session.SessionID), LongLongWaiting)  ← 2

では判りにくいかと思いますが違う画面になっています。
なのにAでは@のインスタンスが見れるという事なのでしょうか?
であればStocker.vbも同一に見れるようになるのは理解できる気がしますが・・・
いまいち、ピント来ていません。

すいません。Stockerに必要な記述も教えて頂けると助かります。m(O)m







引用返信 編集キー/
■41778 / inTopicNo.4)  Re[3]: C#のサンプルをVB.NETへ変換
□投稿者/ 明日はメッシ (5回)-(2009/09/30(Wed) 13:22:53)
SESSIONを使用して回避しました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -