Re: WinForms и многопоточные приложения
От: ion100 Россия  
Дата: 02.11.10 20:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>сейчас, для обращения к элементам формы, для каждой функции приходится создавать прокси-функцию с проверкой InvokeRequired и вызовом Invoke.

А>самое утомительное в данном случае — необходимость объявлять делегаты для каждой функции, со временем их накапливается столько, что рябит в глазах.

А>существует ли более лаконичный способ?




 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        internal  void Print(string s)
        {
            textBox1.Text = s;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            new a(this).Go();
        }
    }
    class a
    {
        Form1 f;
        public a(Form1 f) {  this.f = f;  }
      
      internal  void Go()
        {
            new Thread(delegate()
                {
                    f.Invoke(new MethodInvoker(delegate()
                        {
                            f.Print("fadsfsdf");
                        }));
                  
                }).Start();
        }   
    }








public partial class Form1 : Form
    {
        private SynchronizationContext cont;
        public Form1()
        {
            InitializeComponent();
            cont = SynchronizationContext.Current;
        }

        private void button1_Click(object sender, EventArgs e)
        {
           
            new Thread(delegate()
                { 
                   cont.Post(delegate(Object o)
                       {
                           this.label1.Text = (string)o;
                       }, "blablabla");
                }).Start();
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.