「backgroundworker」を使用して、時間のかかる作業を行うクラスと対話する asp.net Web ページがあります。バックグラウンド ワーカーは、「worker_ProgressChanged」という Web ページでルーチンを起動します。
これは機能し、報告された進行状況をセッション変数に保存します。
しかし今、私は自分のウェブページに進捗状況を伝えなければなりません。だから私は次のことをしました。更新パネルにタイマーを配置し、コード ビハインドでタイマー イベントが発生することを期待しています。そのタイマーイベントで、セッション変数を取得し、ラベルを更新したい (これは updatepanel にもあります) backgroundworker がなければ、タイマーは起動します。しかし、バックグラウンド ワーカーではそうではありません。
進行状況イベントの発生に関する何かは、単にタイマーが起動したり、そのイベント ハンドラーを見つけたりする機能をオフにします。
誰でもこれについてアイデアがありますか?コードは次のとおりです。
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<center>
<table>
<tr><td>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always" >
<ContentTemplate>
<asp:TextBox ID="TextBoxLog" runat="server" TextMode="MultiLine" Rows="5" Width="550px" ReadOnly="true" Visible="false" BackColor="sandybrown"></asp:TextBox>
<asp:Timer ID="Timer1" runat="server" Interval="1000" Enabled="false"></asp:Timer><br />
<asp:Label ID="Labelerror2" SkinID="errorlabel" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</td></tr>
<tr><td>
<asp:Label ID="Label1" runat="server" Text="Please enter the entire path of the video (on your PC) to upload to Azure" SkinID="ordinarylabel"></asp:Label></td></tr>
<tr><td style="text-align:center">
<asp:TextBox ID="TextBoxFileName" runat="server" Width="273px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidatorFilename" ControlToValidate="TextBoxFileName" runat="server" Display="Dynamic"
ErrorMessage="Please enter a file name">*</asp:RequiredFieldValidator>
</td></tr>
<tr><td style="text-align:center">
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True" ShowSummary="False" />
<asp:Button ID="ButtonSubmit" runat="server" Text="Submit" />
</td></tr>
</table>
<asp:Label ID="LabelError" SkinID="errorlabel" runat="server" EnableViewState="false" ClientIDMode="Static" />
<asp:Label ID="LabelExperiment" SkinID="errorlabel" runat="server" EnableViewState="false" ClientIDMode="Static" />
</center>
===================
Imports System.ComponentModel
Partial Class zOwner_UploadAzure
Inherits System.Web.UI.Page
Protected Sub ButtonSubmit_Click(sender As Object, e As EventArgs) Handles ButtonSubmit.Click
Dim strName As String
strName = Me.TextBoxFileName.Text.Trim
If Not ClassStrings.IsValidFileName(strName, True) Then
Me.LabelError.Text = "Error, the filename you supplied does not fit the Windows format of filenames."
Exit Sub
End If
Me.TextBoxLog.Visible = True
AzureNameSpaceGid.Azurex.userpcfilename = strName
AzureNameSpaceGid.Azurex.username = Membership.GetUser.UserName
Dim worker As BackgroundWorker = New BackgroundWorker()
worker.WorkerReportsProgress = True
AddHandler worker.DoWork, AddressOf AzureNameSpaceGid.Azurex.UploadFile
AddHandler worker.ProgressChanged, New ProgressChangedEventHandler(AddressOf worker_ProgressChanged)
Me.Labelerror2.Text = "Starting..."
worker.RunWorkerAsync()
Me.Timer1.Enabled = True
Session("hitsubmit") = True
' AzureNameSpaceGid.Azurex.UploadFile(strName)
' Me.LabelError.Text = "The Upload to Azure is complete - <a href='addvideo500.aspx'>click here</a> to add the video to rateforsuccess."
End Sub
Private Sub worker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
Dim obj As Object
obj = e.UserState
Dim strMessage As String
strMessage = obj.ToString
If strMessage.StartsWith("URL_") Then
Session("azureurl") = strMessage.Substring(4)
Response.Redirect("addvideo500.aspx")
ElseIf strMessage.StartsWith("LOGMESSAGE_") Then
Session("strerror") = Session("strerror") & vbCrLf & "<br />" & strMessage.Substring(11)
Else
Session("strprogress") = Session("strprogress") & vbCrLf & strMessage
End If
' LabelError.Text = ("Progress: " & e.ProgressPercentage.ToString() & "%")
End Sub
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
' Response.AddHeader("cache-control", "no-cache")
If Not Page.IsPostBack Then
Session("hitsubmit") = False
Session("strprogress") = ""
Session("strerror") = ""
End If
If Session("hitsubmit") Then
Me.Timer1.Enabled = True
Me.TextBoxLog.Visible = True
End If
End Sub
Protected Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Me.TextBoxLog.Text = Session("strprogress")
Me.Labelerror2.Text = Session("strError")
Me.LabelExperiment.Text = Me.LabelExperiment.Text & "***"
End Sub
End Class
=======================
実際の azure クラスに配置する十分なスペースがありません。ありがとう