पर रहने के लिए मजबूर करें मुझे अभी भी एक अलग यूआई थ्रेड में Winforms बनाने के तरीके के बारे में पता चल रहा है, जिस पर मैंने here पर चर्चा की थी।थ्रेड में कोई फॉर्म कैसे खोलें और इसे
इसे समझने की कोशिश में मैंने निम्नलिखित सरल परीक्षण कार्यक्रम लिखा। मैं बस इसे "यूआई थ्रेड" नामक एक अलग थ्रेड पर एक फॉर्म खोलना चाहता हूं और जब तक फॉर्म फॉर्म के साथ बातचीत करने की अनुमति देता है तब तक थ्रेड चल रहा है जब तक कि फॉर्म फॉर्म के साथ बातचीत करने की अनुमति देता है (कताई धोखा दे रहा है)। मैं समझता हूं कि नीचे क्यों विफल रहता है और धागा तुरंत बंद हो जाता है लेकिन मुझे यकीन नहीं है कि इसे ठीक करने के लिए मुझे क्या करना चाहिए।
using System;
using System.Windows.Forms;
using System.Threading;
namespace UIThreadMarshalling {
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var tt = new ThreadTest();
ThreadStart ts = new ThreadStart(tt.StartUiThread);
Thread t = new Thread(ts);
t.Name = "UI Thread";
t.Start();
Thread.Sleep(new TimeSpan(0, 0, 10));
}
}
public class ThreadTest {
Form _form;
public ThreadTest() {
}
public void StartUiThread() {
_form = new Form1();
_form.Show();
}
}
}
हाँ, यह माइक्रोसॉफ्ट सिर्फ एक ही संवाद और एकल धागे के अलावा किसी अन्य चीज़ के माध्यम से ठीक से सोचने में असफल रहा है। जैसा कि नीचे दिए गए समाधान कहते हैं, आप एक अलग संदेश पंप शुरू कर सकते हैं, लेकिन जीयूआई थ्रेड से इसे लॉन्च करने का कोई सुविधाजनक तरीका नहीं है, इसलिए दूसरा फॉर्म गैर-मोडल संवाद के रूप में करने का कोई तरीका नहीं है। –
निष्पक्ष होने के लिए, प्रश्न 4 साल पहले और 12 साल पुरानी तकनीक से संबंधित है :) –
हाँ, मुझे पता है, लेकिन इस तथ्य को अलग करते हुए कि 12 साल पहले भी लोग यह चाहते थे, बिना देखे कि मैं एक बड़ी राशि शर्त लगाऊंगा कि एमएस से किसी भी संशोधित/नए एपीआई में स्थिति बदल नहीं है। –