Impossible de convertir implicitement le type 'int' à '...Tâches<int>'
si c'est asynchrone, il va revenir avec aucune erreur, pourquoi est-il de lancer une erreur sans être asynchrone, async est inutile dans cette opération.
public Task<int> countUp()
{
string compare = txtTag.Text;
int count = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (compare == dataGridView1[0, i].Value.ToString())
{
BeginInvoke(new Action(() =>
{
count++;
txtCount.Text = count.ToString();
}));
}
}
return count;
}
Pourquoi avez-vous besoin de retourner un
j'en ai besoin pour s'exécuter sur un autre thread. Comment transmettez-vous dans les instructions de l'INTERFACE utilisateur pour une tâche?
Vous semblez être à tort, l'impression qu'une méthode asynchrone fonctionne sur un autre thread. Il ne le fait pas. Une méthode asynchrone contient un asynchrone attendent et retourne immédiatement lorsque l'attendent arrive. Il a ensuite reprend là où il l'a laissée lorsque la valeur attendue est disponible. Assurez-vous de comprendre, c'est absolument pas le cas qu'une méthode asynchrone nécessairement s'exécute sur un autre thread; en fait, une des raisons qui nous avons ajouté des méthodes asynchrones à C# était de diminution la dépendance sur les threads comme un asynchronisme de mécanisme.
En regardant le code, il semble être à la fois la lecture et l'écriture des champs de contrôle; si c'est le cas, cette méthode ne peut être exécuté que sur le thread d'INTERFACE utilisateur. Franchement ce code semble très suspect. Ce que je ferais si j'étais vous, est démarrer une nouvelle question, décrire soigneusement ce que vous êtes en train de faire, et de demander de l'aide.
Task<int>
plutôt que juste un type normal int
?j'en ai besoin pour s'exécuter sur un autre thread. Comment transmettez-vous dans les instructions de l'INTERFACE utilisateur pour une tâche?
Vous semblez être à tort, l'impression qu'une méthode asynchrone fonctionne sur un autre thread. Il ne le fait pas. Une méthode asynchrone contient un asynchrone attendent et retourne immédiatement lorsque l'attendent arrive. Il a ensuite reprend là où il l'a laissée lorsque la valeur attendue est disponible. Assurez-vous de comprendre, c'est absolument pas le cas qu'une méthode asynchrone nécessairement s'exécute sur un autre thread; en fait, une des raisons qui nous avons ajouté des méthodes asynchrones à C# était de diminution la dépendance sur les threads comme un asynchronisme de mécanisme.
En regardant le code, il semble être à la fois la lecture et l'écriture des champs de contrôle; si c'est le cas, cette méthode ne peut être exécuté que sur le thread d'INTERFACE utilisateur. Franchement ce code semble très suspect. Ce que je ferais si j'étais vous, est démarrer une nouvelle question, décrire soigneusement ce que vous êtes en train de faire, et de demander de l'aide.
OriginalL'auteur ploxtic | 2013-03-17
Vous devez vous connecter pour publier un commentaire.
Bien, vous pourrait retour d'une Tâche terminée:
http://msdn.microsoft.com/en-us/library/hh194922.aspx
Pourquoi vous voulez le retour d'une Tâche est un peu un mystère. Conceptuellement, une Tâche représente un espoir que quelque chose va arriver à un certain moment dans l'avenir. Dans votre cas, c'est déjà arrivé, donc à l'aide d'une Tâche est complètement inutile.
OriginalL'auteur spender
Que l'erreur indique clairement, vous ne pouvez pas retourner un
int
comme unTask<int>
. (sauf si vous faites unasync
méthode, qui fait au moment de la compilation de la magie pour créer unTask<T>
.Si votre méthode n'est pas asynchrone, vous ne devriez pas retourner une
Task<T>
en premier lieu.Au lieu de cela, il suffit de retourner
int
directement.Si, pour une raison quelconque, vous besoin retour d'un
Task<T>
, vous pouvez appelerTask.FromResult()
pour créer un fini tâche avec une valeur donnée.OriginalL'auteur SLaks
Il n'y a rien dans cette méthode, en indiquant que c'est une méthode asynchrone, sauf pour le fait que vous avez déclaré que c'retour
Task<int>
.Cependant, vous n'êtes pas de retour d'un
Task<int>
, vous êtes de retourcount
, unint
.Puisque vous n'êtes pas d'attente pour l'action pour terminer, je voudrais supprimer le
Task<int>
type de retour et de le remplacer avec justeint
au lieu que cette méthode est totalement synchrone (à l'exception de la partie que vous n'êtes pas à l'attente de toute façon).OriginalL'auteur Lasse Vågsæther Karlsen
Le code ici est manifestement inexact. Essayez de regarder le type de retour dans votre code. Vous êtes de retour et
int
qui incompatibilité de type de retour que j'attendais unTask<int>
. Si vous n'allez pas utiliser async vous attendent dans cette méthode, vous pouvez simplement changer votre type de retour deint
.Toutefois, si vous insistez sur le retour
Task<int>
au lieu deint
, vous pouvez utiliser les éléments suivants pour votre instruction de retourCela va envelopper votre
int
enTask<int>
. Pour plus d'informations deTask.FromResult
, vous pouvez visiter :https://msdn.microsoft.com/en-us/library/hh194922(v=vs. 110).aspx
Qu'est-ce que l'utilisation de la Tâche.FromResult<TResult> en C#
OriginalL'auteur jet_choong