C # winForms et NetworkStream.beginRead (), comment ouvrir un nouveau formulaire en fonction de l'événement réseau?

StackOverflow https://stackoverflow.com/questions/9508481

Question

J'ai de sérieux problèmes à obtenir la communication d'un fil à un autre travail entre NetworkStream.beginRead () et une classe WinForms (je suis un vrai débutant en ce qui concerne des sujets tels que le filetage et les appels asynchrones).

En particulier, je suis connecté à un client distant via un socket net, en écoutant simplement des événements. Lorsque j'en reçois un, je peux le collecter correctement en une chaîne en utilisant les méthodes BeginRead () et EndRead () de NetworkSstream, pas de problèmes. J'ai l'intention d'ouvrir ensuite un nouveau formulaire (en utilisant la chaîne comme paramètre dans le constructeur du formulaire) afin que les informations puissent être affichées à l'utilisateur. En effet, l'événement réseau déclenchera un formulaire pour que l'utilisateur soit ouvert, et les informations cependant, je rencontre constamment CrossthreadMessagingExceptions, et je ne connais pas assez les délégués que je suis convaincu que je le fais bien. Quelqu'un pourrait-il me diriger dans la bonne direction?

Était-ce utile?

La solution

La règle est: "Vous ne pouvez accéder aux contrôles que sur le fil sur lequel ils ont créé"

Les rappels asynchronisés reviennent sur un autre fil, vous devez donc rassembler le fil d'interface utilisateur si vous souhaitez communiquer entre les formulaires.

En supposant que vous êtes NetworkStream Le code est déjà sous un formulaire, il vous suffit d'utiliser invoquer ou beginInvoke. Par exemple:

private void MyAsyncCallback(IAsyncResult ar)
{
    var yourString = ...from your socket...;
    this.Invoke(new MethodInvoker(() => new Form(yourString)));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top