C# 使用WebCLient发送文件:什么是userToken?

C# 使用WebCLient发送文件:什么是userToken?,c#,webclient,C#,Webclient,我一直试图在SileverLight应用程序中通过WebClient将文件上传到服务器。我遇到过这个OpenWriteAsync方法,它得到的前两个参数很清楚,但第三个是object类型,它的名称是UserToken,所以尽管我做了很多搜索,但找不到关于它是什么以及如何使用的清晰描述。(UserToken参数)。那里面有什么 微软提供的用户定义对象是……这是一个糟糕的解释。我的意思是,他们必须提供一张可以进入那里的所有房产的地图,比如: new {param1 = value, param2=

我一直试图在SileverLight应用程序中通过
WebClient
将文件上传到服务器。我遇到过这个
OpenWriteAsync
方法,它得到的前两个参数很清楚,但第三个是object类型,它的名称是
UserToken
,所以尽管我做了很多搜索,但找不到关于它是什么以及如何使用的清晰描述。(UserToken参数)。那里面有什么

微软提供的用户定义对象是……这是一个糟糕的解释。我的意思是,他们必须提供一张可以进入那里的所有房产的地图,比如:

new {param1 = value, param2= value}

开发人员无法猜测用户定义的对象是如何自然工作的

基本上就是你想要的。它包含将在
OpenWriteCompleted
事件中传递给事件参数的状态数据。
WebClient
除了传递数据外,不会以任何方式使用此数据

private void OpenWrite()
{
    webClient.OpenWriteCompleted += webClient_OpenWriteCompleted;

    // I'm just using this as an example. It can be any data type, but I am using byte[] so I can write it to the stream later.
    byte[] data = new byte[] { 0, 1, 3, 4 }; 

    webClient.OpenWriteAsync(uri, method, data);
}

private void webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
    // Now e.UserState contains whatever data you passed as the userToken.
    byte[] data = (byte[])e.UserState;

    // Now write this data to the stream
    e.Result.Write(data, 0, data.Length);
    e.Result.Close();
}

如果您不需要传递任何状态信息,只需传递
null

基本上它就是您想要的。它包含将在
OpenWriteCompleted
事件中传递给事件参数的状态数据。
WebClient
除了传递数据外,不会以任何方式使用此数据

private void OpenWrite()
{
    webClient.OpenWriteCompleted += webClient_OpenWriteCompleted;

    // I'm just using this as an example. It can be any data type, but I am using byte[] so I can write it to the stream later.
    byte[] data = new byte[] { 0, 1, 3, 4 }; 

    webClient.OpenWriteAsync(uri, method, data);
}

private void webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
    // Now e.UserState contains whatever data you passed as the userToken.
    byte[] data = (byte[])e.UserState;

    // Now write this data to the stream
    e.Result.Write(data, 0, data.Length);
    e.Result.Close();
}

如果您不需要传递任何状态信息,只需传递
null

基本上它就是您想要的。它包含将在
OpenWriteCompleted
事件中传递给事件参数的状态数据。
WebClient
除了传递数据外,不会以任何方式使用此数据

private void OpenWrite()
{
    webClient.OpenWriteCompleted += webClient_OpenWriteCompleted;

    // I'm just using this as an example. It can be any data type, but I am using byte[] so I can write it to the stream later.
    byte[] data = new byte[] { 0, 1, 3, 4 }; 

    webClient.OpenWriteAsync(uri, method, data);
}

private void webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
    // Now e.UserState contains whatever data you passed as the userToken.
    byte[] data = (byte[])e.UserState;

    // Now write this data to the stream
    e.Result.Write(data, 0, data.Length);
    e.Result.Close();
}

如果您不需要传递任何状态信息,只需传递
null

基本上它就是您想要的。它包含将在
OpenWriteCompleted
事件中传递给事件参数的状态数据。
WebClient
除了传递数据外,不会以任何方式使用此数据

private void OpenWrite()
{
    webClient.OpenWriteCompleted += webClient_OpenWriteCompleted;

    // I'm just using this as an example. It can be any data type, but I am using byte[] so I can write it to the stream later.
    byte[] data = new byte[] { 0, 1, 3, 4 }; 

    webClient.OpenWriteAsync(uri, method, data);
}

private void webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
    // Now e.UserState contains whatever data you passed as the userToken.
    byte[] data = (byte[])e.UserState;

    // Now write this data to the stream
    e.Result.Write(data, 0, data.Length);
    e.Result.Close();
}


如果您不需要传递任何状态信息,只需传递
null

是否尝试搜索文档。文件不清楚吗?“在异步操作完成时传递给调用的方法的用户定义对象”。什么部分不清楚?@VikasGupta:你有没有看过你所附链接的内容。那么描述在哪里呢?我想知道里面有什么!您是否尝试搜索文档。文件不清楚吗?“在异步操作完成时传递给调用的方法的用户定义对象”。什么部分不清楚?@VikasGupta:你有没有看过你所附链接的内容。那么描述在哪里呢?我想知道里面有什么!您是否尝试搜索文档。文件不清楚吗?“在异步操作完成时传递给调用的方法的用户定义对象”。什么部分不清楚?@VikasGupta:你有没有看过你所附链接的内容。那么描述在哪里呢?我想知道里面有什么!您是否尝试搜索文档。文件不清楚吗?“在异步操作完成时传递给调用的方法的用户定义对象”。什么部分不清楚?@VikasGupta:你有没有看过你所附链接的内容。那么描述在哪里呢?我想知道里面有什么!这是openWrite,那么我想写入的字节数组应该放在哪里呢?
e.Result
包含一个可写流。将您的字节数组写入该sream。您的意思是我将流写入结果,或者换句话说,写入异步任务的响应?它没有任何意义,你写的结果流。异步任务只是打开流。(在流打开之前不能写入。)@JAX这里有一个如何写入流的示例:它是openWrite,那么我想写入的字节数组应该放在哪里?
e.Result
包含一个可写流。将您的字节数组写入该sream。您的意思是我将流写入结果,或者换句话说,写入异步任务的响应?它没有任何意义,你写的结果流。异步任务只是打开流。(在流打开之前不能写入。)@JAX这里有一个如何写入流的示例:它是openWrite,那么我想写入的字节数组应该放在哪里?
e.Result
包含一个可写流。将您的字节数组写入该sream。您的意思是我将流写入结果,或者换句话说,写入异步任务的响应?它没有任何意义,你写的结果流。异步任务只是打开流。(在流打开之前不能写入。)@JAX这里有一个如何写入流的示例:它是openWrite,那么我想写入的字节数组应该放在哪里?
e.Result
包含一个可写流。将您的字节数组写入该sream。您的意思是我将流写入结果,或者换句话说,写入异步任务的响应?它没有任何意义,你写的结果流。异步任务只是打开流。(在流打开之前不能写入流。)@JAX这里有一个如何写入流的示例: