Ich möchte einen Youtube Downloader bauen mit der Youtube API. Der Beispielcode funktioniert in der Konsolenanwendung auch sehr gut, jedoch möchte ich das eher in einer WinForm verwenden. Okay... Button genommen und verlinkte Klasse aufgerufen... Funktioniert teilweise... wenn er die Anfrage schickt, passiert nichts und er bleibt stehen.
static void Main(string[] args)
{
Search s = new Search();
s.Searchword("Goole");
}
[STAThread]
public void Searchword(string searchword)
{
try
{
new Search().Run(searchword).Wait();
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
{
System.Diagnostics.Debug.WriteLine("Error: " + e.Message);
}
}
}
public async Task Run(string searchword)
{
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
ApiKey = "mein Geheimnis",
ApplicationName = this.GetType().ToString()// "YoutubeApiSearch.Search" //
});
var searchListRequest = youtubeService.Search.List("snippet");
searchListRequest.Type = "video";
searchListRequest.Q = searchword; // Replace with your search term.
searchListRequest.VideoLicense = SearchResource.ListRequest.VideoLicenseEnum.CreativeCommon;
searchListRequest.MaxResults = 50;
// Call the search.list method to retrieve results matching the specified query term.
var searchListResponse = await searchListRequest.ExecuteAsync();
....
In der Konsolenanwendung geht er problemlos über die letzte Zeile und empfängt Ergebnisse. Die WinForm-Anwenung ruft identisch die Klasse auf, kommt aber über die letzte Zeile nicht drüber weg.
private void get_Button_Click(object sender, EventArgs e)
{
Search s = new Search();
s.Searchword("Google");
Ich muss gestehen, dass ich nicht mal eine Idee habe was der Unterschied ist.
tut wohl nicht viel zur Sache, aber ist das so gewollt? Zitat:
[STAThread]
public void Searchword(string searchword)
Ich kenne STAThread sonst nur beim Einstiegspunkt bzw. der Main Methode.
Wird get_Button_Click aufgerufen bzw. ist das Ereignis abboniert?
Fehler gefunden... Das Zauberwort heißt "async" und "await"
private async void get_Button_Click(object sender, EventArgs e)
{
try
{
await Run("google");
}
catch (AggregateException ex)
{
System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
}
}
Eigentlich ist folgendes das Zauberwort: [FAQ] Warum blockiert mein GUI?
async/await ist nur ein Hilfsmittel dabei....
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code