Je travaille sur une application C#.InvalidOperationException sur ShowDialog
J'ai un objet utilisé comme une boîte de dialogue:
public partial class MyDialog : Form
Les fenêtres principales est:
public class MyForm : Form
je peux l'utiliser par:
public class ProgramApp
{
public static MyForm MainForm { get { return _mainForm; } }
}
Dans une fonction I peut utiliser les deux avec:
MyDialog dlg = new MyDialog();
dlg.ShowDialog(ProgramApp.MainForm);
premier appel fonctionne bien, mais la seconde j'ai un System.InvalidOperationException avec HResult = 0x80131509 et un message:
opération de la Croix-fil non valide: contrôle « MainForm » accessible à partir d'un fil autre que le fil sur lequel il a été créé.
(traduit de messages français, original :)
« intercommunalité-fils non valid: le contrôle 'MainForm' un fait l'objet d'un à partir d'Accès fil un autre que celui sur où il a été créé. "
Que puis-je faire pour résoudre ce problème?
Edit:
J'ajouté ce morceau de code:
MyDialog dlg = new MyDialog();
bool needInvokeDlg = dlg.InvokeRequired;
bool needInvokeForm = ProgramApp.MainForm.InvokeRequired;
dlg.ShowDialog(ProgramApp.MainForm);
Première tentative les deux sont faux. En second lieu, needInvokeForm est vrai. Comment puis-je faire un Invoke pour définir ProgramApp.MainForm en tant que paramètre?
n'a pas trouvé de réponse dans le message original –
@dotctor Pouvez-vous rouvrir la question s'il vous plaît? –
Peut-être suffirait-il de simplement convertir le formulaire en l'interface 'IWin32Window' requise, c'est-à-dire' dlg.ShowDialog ((IWin32Window) ProgramApp.MainForm); 'car il n'y a pas d'élément d'interface utilisateur. – stuartd