1

public string [] SearchForMovie(string SearchParameter){
WebClientX.DownloadDataCompleted + = new DownloadDataCompletedEventHandler(WebClientX_DownloadDataCompleted); WebClientX.DownloadDataAsync(new Uri( " http://www.imdb.com/find?s=all&q=ironman+&x=0&y=0 "));

    string sitesearchSource = Encoding.ASCII.GetString(Buffer);
}

void WebClientX_DownloadDataCompleted(object sender,
    DownloadDataCompletedEventArgs e)
{
    Buffer = e.Result;
    throw new NotImplementedException();
}

この例外が発生します:

行列をnullにすることはできません。私のbyte[]変数Bufferを参照しています。

したがって、DownloadDataAsyncは実際には何もダウンロードしていないと結論付けることができます。この問題の原因は何ですか?

PS。ここで適切にインデントされて表示されるように、コードを簡単にフォーマットするにはどうすればよいですか。Visual C#Expressからコードをコピーして、ここでインデントを維持できないのはなぜですか?ありがとう!:D

4

1 に答える 1

3

ここでのキーワードは「非同期」です。を呼び出すと、ダウンロードが開始DownloadDataAsyncされるだけです。まだ完全ではありません。コールバック ( ) でデータを処理する必要があります。WebClientX_DownloadDataCompleted

public string[] SearchForMovie(string SearchParameter)
{
    WebClientX.DownloadDataCompleted += WebClientX_DownloadDataCompleted;
    WebClientX.DownloadDataAsync(new Uri(uri));
}

void WebClientX_DownloadDataCompleted(object sender,
     DownloadDataCompletedEventArgs e)
{
    Buffer = e.Result;
    string sitesearchSource = Encoding.ASCII.GetString(Buffer);
}

また、ASCII を想定しないでください。WebClientX.Encodingのほうがいい; または単にDownloadStringAsync

static void Main()
{
    var client = new WebClient();
    client.DownloadStringCompleted += DownloadStringCompleted;
    client.DownloadStringAsync(new Uri("http://google.com"));
    Console.ReadLine();
}

static void DownloadStringCompleted(object sender,
    DownloadStringCompletedEventArgs e)
{
    if (e.Error == null && !e.Cancelled)
    {
        Console.WriteLine(e.Result);
    }
}
于 2009-10-18T22:35:22.970 に答える