2010-05-19 16 views
5

जमा एक रूप (एफ 1) मैं एक बटन है, जिसमें से अगर मैं एक और रूप बनाने के (देता है इसे कहते F2) है पर है और यह कोई समस्या नहींWinForms प्रपत्र

वहाँ दिखाने लेकिन मैं कुछ इस तरह करना चाहते हैं

मेरे ऐप में कुछ थ्रेड एक कनेक्शन चला रहा है और सर्वर से संदेशों के लिए सुनता है। जब कोई संदेश आता है, तो मेरा मुख्य रूप एक फ़ंक्शन चलाते हुए एक ईवेंट प्राप्त करने के लिए पंजीकृत होता है। उस फ़ंक्शन से मैं F2 प्रकार फ़ॉर्म (खाली, इसमें कुछ भी संशोधित नहीं) बनाने और दिखाने की कोशिश कर रहा हूं: यह दिखाता है लेकिन फिर यह मेरे एप्लिकेशन को जमा करता है।

अधिक वास्तव में:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     ConnectionManagerThread.getResponseListener().MessageReceived += Form1_OnMessageReceived; 
    } 

    private void Form1_OnMessageReceived(object sender, MessageEventArgs e) { 
     Form2 f2 = new Form2(); 
     f2.Show(); 
    } 
} 
+0

क्या आपने उन लाइनों को पकड़ने की कोशिश की है जो आपको लगता है कि फ्रीज का कारण बनता है? – Terry

+0

सी # के रूप में नहीं है। –

+0

फ्रीज f2 के बाद होता है। दिखाएं()। कोई त्रुटि नहीं है, कोई अपवाद नहीं चल रहा है। मेरा अनुमान है कि समस्या हो सकती है क्योंकि फ़ॉर्म व्यावहारिक रूप से किसी अन्य धागे से शुरू किया जा रहा है –

उत्तर

7

मुझे लगता है कि कारण आप पार धागा संचालन प्रदर्शन कर रहे हैं है। फॉर्म 2 बनाने से पहले आपको यूआई थ्रेड पर फॉर्म का निर्माण करना होगा। मुझे लगता है कि निम्नलिखित आप

public delegate void ShowForm(object sender, MessageEventArgs e); 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
     ConnectionManagerThread.getResponseListener().MessageReceived += Form1_OnMessageReceived; 
    } 

    private void Form1_OnMessageReceived(object sender, MessageEventArgs e) 
    { 
     if (this.InvokeRequired) 
     { 
      this.BeginInvoke(new ShowForm((Form1_OnMessageReceived), new object[] { sender, e })); 
     } 
     else 
     { 
      Form2 f2 = new Form2(); 
      f2.Show(); 
     } 
     } 
    } 
+0

मुझे लगता है कि "यह। बेगिन इनवोक (नया शोफॉर्म (नया ऑब्जेक्ट [] {प्रेषक, ई})" में समस्या है; " लाइन। यह कहता है "त्रुटि CS0149: विधि का नाम अपेक्षित" –

+0

@andrew - अभी जांचें, मैं लक्ष्य नाम रखना भूल गया :)। – Ram

2

मदद राम के कोड मैं अंत में यह मिल गया का उपयोग कर जाएगा और यह काम करता

thanx!

public delegate void ShowForm(object sender, MessageEventArgs e); 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     ConnectionManagerThread.getResponseListener().MessageReceived += Form1_OnMessageReceived; 
    } 

    private void Form1_OnMessageReceived(object sender, MessageEventArgs e) 
    { 
     ShowForm2(sender, e); 
    } 

    private void ShowForm2(object sender, MessageEventArgs e) 
    { 
     if (this.InvokeRequired) 
     { 
      ShowForm f = new ShowForm(ShowForm2); 
      this.Invoke(f, new object[] { sender, e }); 
     } 
     else 
     { 
      Form2 f2 = new Form2(); 
      f2.Show(); 
     } 
    } 
}