FileWebRequest.BeginGetResponse(AsyncCallback, Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
开始对文件系统资源的异步请求。
public:
override IAsyncResult ^ BeginGetResponse(AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginGetResponse (AsyncCallback? callback, object? state);
public override IAsyncResult BeginGetResponse (AsyncCallback callback, object state);
override this.BeginGetResponse : AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginGetResponse (callback As AsyncCallback, state As Object) As IAsyncResult
参数
- callback
- AsyncCallback
AsyncCallback 委托。
- state
- Object
包含此请求的状态信息的对象。
返回
引用该异步请求的 IAsyncResult。
例外
该流已由对 BeginGetResponse(AsyncCallback, Object) 的上一个调用使用。
示例
下面的代码示例使用 BeginGetResponse 方法异步访问文件系统资源。
public ref class RequestDeclare
{
public:
FileWebRequest^ myFileWebRequest;
RequestDeclare()
{
myFileWebRequest = nullptr;
}
};
ref class FileWebRequest_resbeginend
{
public:
static ManualResetEvent^ allDone = gcnew ManualResetEvent( false );
static void RespCallback( IAsyncResult^ ar )
{
// State of request is asynchronous.
RequestDeclare^ requestDeclare = dynamic_cast<RequestDeclare^>(ar->AsyncState);
FileWebRequest^ myFileWebRequest = requestDeclare->myFileWebRequest;
// End the Asynchronus request by calling the 'EndGetResponse()' method.
FileWebResponse^ myFileWebResponse = dynamic_cast<FileWebResponse^>(myFileWebRequest->EndGetResponse( ar ));
// Reade the response into Stream.
StreamReader^ streamReader = gcnew StreamReader( myFileWebResponse->GetResponseStream() );
array<Char>^readBuffer = gcnew array<Char>(256);
int count = streamReader->Read( readBuffer, 0, 256 );
Console::WriteLine( "The contents of the file are :\n" );
while ( count > 0 )
{
String^ str = gcnew String( readBuffer,0,count );
Console::WriteLine( str );
count = streamReader->Read( readBuffer, 0, 256 );
}
streamReader->Close();
// Release the response Object* resources.
myFileWebResponse->Close();
allDone->Set();
Console::WriteLine( "File reading is over." );
}
};
int main()
{
array<String^>^args = Environment::GetCommandLineArgs();
if ( args->Length < 2 )
{
Console::WriteLine( "\nPlease enter the file name as command line parameter:" );
Console::WriteLine( "Usage:FileWebRequest_resbeginend <systemname>/<sharedfoldername>/<filename>\n" );
Console::WriteLine( "Example:FileWebRequest_resbeginend shafeeque/shaf/hello.txt" );
}
else
{
try
{
// Place a 'Webrequest'.
WebRequest^ myWebRequest = WebRequest::Create( String::Concat( "file://", args[ 1 ] ) );
// Create an instance of the 'RequestDeclare' and associating the 'myWebRequest' to it.
RequestDeclare^ myRequestDeclare = gcnew RequestDeclare;
myRequestDeclare->myFileWebRequest = dynamic_cast<FileWebRequest^>(myWebRequest);
// Begin the Asynchronous request for getting file content using 'BeginGetResponse()' method.
IAsyncResult^ asyncResult = dynamic_cast<IAsyncResult^>(myRequestDeclare->myFileWebRequest->BeginGetResponse( gcnew AsyncCallback( &FileWebRequest_resbeginend::RespCallback ), myRequestDeclare ));
FileWebRequest_resbeginend::allDone->WaitOne();
}
catch ( ArgumentNullException^ e )
{
Console::WriteLine( "ArgumentNullException is : {0}", e->Message );
}
catch ( UriFormatException^ e )
{
Console::WriteLine( "UriFormatException is : {0}", e->Message );
}
}
}
public class RequestDeclare
{
public FileWebRequest myFileWebRequest;
public RequestDeclare()
{
myFileWebRequest = null;
}
}
class FileWebRequest_resbeginend
{
public static ManualResetEvent allDone = new ManualResetEvent(false);
static void Main(string[] args)
{
if (args.Length < 1)
{
Console.WriteLine("\nPlease enter the file name as command line parameter:");
Console.WriteLine("Usage:FileWebRequest_resbeginend <systemname>/<sharedfoldername>/<filename>\nExample:FileWebRequest_resbeginend shafeeque/shaf/hello.txt");
}
else
{
try
{
// Place a 'Webrequest'.
WebRequest myWebRequest= WebRequest.Create("file://"+args[0]);
// Create an instance of the 'RequestDeclare' and associating the 'myWebRequest' to it.
RequestDeclare myRequestDeclare = new RequestDeclare();
myRequestDeclare.myFileWebRequest = (FileWebRequest)myWebRequest;
// Begin the Asynchronous request for getting file content using 'BeginGetResponse()' method.
IAsyncResult asyncResult =(IAsyncResult) myRequestDeclare.myFileWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestDeclare);
allDone.WaitOne();
}
catch(ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException is :"+e.Message);
}
catch(UriFormatException e)
{
Console.WriteLine("UriFormatException is :"+e.Message);
}
}
}
private static void RespCallback(IAsyncResult ar)
{
// State of request is asynchronous.
RequestDeclare requestDeclare=(RequestDeclare) ar.AsyncState;
FileWebRequest myFileWebRequest=requestDeclare.myFileWebRequest;
// End the Asynchronus request by calling the 'EndGetResponse()' method.
FileWebResponse myFileWebResponse = (FileWebResponse) myFileWebRequest.EndGetResponse(ar);
// Reade the response into Stream.
StreamReader streamReader= new StreamReader(myFileWebResponse.GetResponseStream());
Char[] readBuffer = new Char[256];
int count = streamReader.Read( readBuffer, 0, 256 );
Console.WriteLine("The contents of the file are :\n");
while (count > 0)
{
String str = new String(readBuffer, 0, count);
Console.WriteLine(str);
count = streamReader.Read(readBuffer, 0, 256);
}
streamReader.Close();
// Release the response object resources.
myFileWebResponse.Close();
allDone.Set();
Console.WriteLine("File reading is over.");
}
}
Public Class RequestDeclare
Public myFileWebRequest As FileWebRequest
Public Sub New()
myFileWebRequest = Nothing
End Sub
End Class
Class FileWebRequest_resbeginend
Public Shared allDone As New ManualResetEvent(False)
' Entry point which delegates to C-style main Private Function.
Public Overloads Shared Sub Main()
Main(GetCommandLineArgs())
End Sub
Overloads Shared Sub Main(args() As String)
If args.Length < 2 Then
Console.WriteLine(ControlChars.Cr + "Please enter the file name as command line parameter:")
Console.WriteLine("Usage:FileWebRequest_resbeginend " + ChrW(60) + "systemname" + ChrW(62) + "/" + ChrW(60) + "sharedfoldername" + ChrW(62) + "/" + ChrW(60) + "filename" + ChrW(62) + ControlChars.Cr + "Example:FileWebRequest_resbeginend shafeeque/shaf/hello.txt")
Else
Try
' Place a webrequest.
Dim myWebRequest As WebRequest = WebRequest.Create(("file://" + args(1)))
' Create an instance of the 'RequestDeclare' and associating the 'myWebRequest' to it.
Dim myRequestDeclare As New RequestDeclare()
myRequestDeclare.myFileWebRequest = CType(myWebRequest, FileWebRequest)
' Begin the Asynchronous request for getting file content using 'BeginGetResponse()' method.
Dim asyncResult As IAsyncResult = CType(myRequestDeclare.myFileWebRequest.BeginGetResponse(AddressOf RespCallback, myRequestDeclare), IAsyncResult)
allDone.WaitOne()
Catch e As ArgumentNullException
Console.WriteLine(("ArgumentNullException is :" + e.Message))
Catch e As UriFormatException
Console.WriteLine(("UriFormatException is :" + e.Message))
End Try
End If
End Sub
Private Shared Sub RespCallback(ar As IAsyncResult)
' State of request is asynchronous.
Dim requestDeclare As RequestDeclare = CType(ar.AsyncState, RequestDeclare)
Dim myFileWebRequest As FileWebRequest = requestDeclare.myFileWebRequest
' End the Asynchronus request by calling the 'EndGetResponse()' method.
Dim myFileWebResponse As FileWebResponse = CType(myFileWebRequest.EndGetResponse(ar), FileWebResponse)
' Reade the response into Stream.
Dim streamReader As New StreamReader(myFileWebResponse.GetResponseStream())
Dim readBuffer(256) As [Char]
Dim count As Integer = streamReader.Read(readBuffer, 0, 256)
Console.WriteLine("The contents of the file are :"+ControlChars.Cr)
While count > 0
Dim str As New [String](readBuffer, 0, count)
Console.WriteLine(str)
count = streamReader.Read(readBuffer, 0, 256)
End While
streamReader.Close()
' Release the response object resources.
myFileWebResponse.Close()
allDone.Set()
Console.WriteLine("File reading is over.")
End Sub
End Class
注解
实现委托的 AsyncCallback 异步回调方法使用 EndGetResponse 方法返回实际的 FileWebResponse。