异步任务到Youtube

时间:2015-04-26 06:43:57

标签: c# visual-studio-2010 youtube async-await

我实际上是新手。我有一个简短的应用程序,只是为了检查应用程序是否可以从youtube异步获取身份验证并将应用程序返回到它的跟踪。以下是我的代码片段

private async void button1_Click(object sender, RoutedEventArgs e)
{
    await YoutubeAuth();

    MessageBox.Show(token);
}

private async Task YoutubeAuth()
{
    OAUth2Credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        new ClientSecrets { ClientId = YoutubeClientId, ClientSecret = YoutubeClientSecret },
        // This OAuth 2.0 access scope allows an application to upload files to the
        // authenticated user's YouTube channel, but doesn't allow other types of access.
        new[] { YouTubeService.Scope.YoutubeUpload },
        "user",
        CancellationToken.None
    );

    token = OAUth2Credential.Token.TokenType;
}

代码MessageBox.Show(token);从未执行过。

修改

我尝试过其他更简单的代码,但仍然永远不会触发MessageBox

private async void button1_Click(object sender, RoutedEventArgs e)
{
    await YoutubeAuth();

    MessageBox.Show(token);
}

private async Task YoutubeAuth()
{
    token = "test token";
}

2 个答案:

答案 0 :(得分:1)

我的猜测是你创建了一个名为button1的按钮,然后你编写了一个名为button1_Click的方法,但你从未将这两个方法联系在一起。

在常见的.Net UI框架(Winforms,WPF)中,这不起作用,因为方法的名称实际上并不重要。重要的是按钮设置为在单击时调用方法。如何做到这一点取决于用户界面,但我相信双击设计器中的按钮应该创建一个方法,可以在你点击时调用。

答案 1 :(得分:0)

这看起来很有趣。我已经快速编写了WPF示例应用程序来验证

MainWindow.xaml

<Window x:Class="TestAsyncTaskToYoutube.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestAsyncTaskToYoutube"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button x:Name="button" Content="Button" />
    </Grid>
</Window>

MainWindow.xaml.cs

using System.Threading.Tasks;
using System.Windows;

namespace TestAsyncTaskToYoutube
{
    public partial class MainWindow : Window
    {
        private string token;

        public MainWindow()
        {
            InitializeComponent();
            button.Click += button_Click;
        }

        private async void button_Click(object sender, RoutedEventArgs e)
        {
            await YoutubeAuth();
            MessageBox.Show(token);
        }

        private Task<int> YoutubeAuth()
        {
            token = "test token";
            return Task.FromResult(0);
        }
    }
}

这里没问题。 MessageButton应该触发它。我确信你的代码与我的代码有点不同:|

我们如何帮助你?

编辑:避免Task.FromResult()(.NET 4.5功能)

private async Task YoutubeAuth()
{
    token = "test token";
}