首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新控件线程安全

更新控件线程安全
EN

Stack Overflow用户
提问于 2013-03-10 19:20:53
回答 1查看 597关注 0票数 0

如何在不创建多个定义(如新函数和新委托)的情况下,修改textbox控件或numbericUpDown控件的文本值或数字值,或者向listview控件添加项和/或子项,或者从线程中更新进度条?

EN

回答 1

Stack Overflow用户

发布于 2013-03-10 19:20:53

我为我创建的应用程序所需的一组控件创建了一组线程安全的扩展函数,这些控件需要对表单进行大量线程更新。该类将方法直接添加到控件中,因此使访问控件线程安全只需极少的代码更改。只需将这个类添加到您的项目中。

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace System.Windows.Forms
{
  public static class TSFormExtenders
  {
    #region Control
    public static void SetEnabledTS(this Control x, bool s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetEnabledTS(s);
        }));
      }
      else
      {
        x.Enabled = s;
      }
    }

    public static bool GetEnabledTS(this Control x, bool def = false)
    {
      if (x.InvokeRequired)
      {
        bool m_ret = def;
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          m_ret = x.GetEnabledTS();
        }));
        return m_ret;
      }
      else
      {
        return x.Enabled;
      }
    }

    public static void SetTextTS(this Control x, String s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetTextTS(s);
        }));
      }
      else
      {
        x.Text = s;
      }
    }

    public static String GetTextTS(this Control x, String def = "")
    {
      if (x.InvokeRequired)
      {
        String m_ret = def;
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          m_ret = x.GetTextTS();
        }));
        return m_ret;
      }
      else
      {
        return x.Text;
      }
    }

    public static void SetVisibleTS(this Control x, bool s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetVisibleTS(s);
        }));
      }
      else
      {
        x.Visible = s;
      }
    }

    public static bool GetVisibleTS(this Control x, bool def = true)
    {
      if (x.InvokeRequired)
      {
        bool m_ret = def;
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          m_ret = x.GetVisibleTS();
        }));
        return m_ret;
      }
      else
      {
        return x.Visible;
      }
    }

    public static void SetSizeTS(this Control x, Size s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetSizeTS(s);
        }));
      }
      else
      {
        x.Size = s;
      }
    }

    public static Size GetSizeTS(this Control x)
    {
      if (x.InvokeRequired)
      {
        Size m_ret = new Size();
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          m_ret = x.GetSizeTS();
        }));
        return m_ret;
      }
      else
      {
        return x.Size;
      }
    }
    #endregion

    #region CheckBox
    public static void SetCheckedTS(this CheckBox x, bool s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetCheckedTS(s);
        }));
      }
      else
      {
        x.Checked = s;
      }
    }

    public static bool GetCheckedTS(this CheckBox x)
    {
      if (x.InvokeRequired)
      {
        bool m_ret = false;
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          m_ret = x.GetCheckedTS();
        }));
        return m_ret;
      }
      else
      {
        return x.Checked;
      }
    }
    #endregion

    #region NumericUpDown
    public static void SetValueTS(this NumericUpDown x, Decimal s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetValueTS(s);
        }));
      }
      else
      {
        x.Value = s;
      }
    }

    public static Decimal GetValueTS(this NumericUpDown x)
    {
      if (x.InvokeRequired)
      {
        Decimal m_ret = 0;
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          m_ret = x.GetValueTS();
        }));
        return m_ret;
      }
      else
      {
        return x.Value;
      }
    }

    public static void SetMinTS(this NumericUpDown x, Decimal s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetMinTS(s);
        }));
      }
      else
      {
        x.Minimum = s;
      }
    }

    public static void SetMaxTS(this NumericUpDown x, Decimal s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetMaxTS(s);
        }));
      }
      else
      {
        x.Maximum = s;
      }
    }
    #endregion

    #region ProgressBar
    public static void SetValueTS(this ProgressBar x, Int32 s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetValueTS(s);
        }));
      }
      else
      {
        x.Value = s;
      }
    }

    public static Int32 GetValueTS(this ProgressBar x)
    {
      if (x.InvokeRequired)
      {
        Int32 m_ret = 0;
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          m_ret = x.GetValueTS();
        }));
        return m_ret;
      }
      else
      {
        return x.Value;
      }
    }

    public static void SetMinTS(this ProgressBar x, Int32 s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetMinTS(s);
        }));
      }
      else
      {
        x.Minimum = s;
      }
    }

    public static void SetMaxTS(this ProgressBar x, Int32 s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.SetMaxTS(s);
        }));
      }
      else
      {
        x.Maximum = s;
      }
    }
    #endregion

    #region ListView
    public static void AddItemTS(this ListView x, ListViewItem s)
    {
      if (x.InvokeRequired)
      {
        x.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.AddItemTS(s);
        }));
      }
      else
      {
        x.Items.Add(s);
      }
    }

    public static void AddItemTS(this ListViewItem x, System.Windows.Forms.ListViewItem.ListViewSubItem s)
    {
      if (x.ListView.InvokeRequired)
      {
        x.ListView.Invoke(new EventHandler(delegate(object o, EventArgs a)
        {
          x.AddItemTS(s);
        }));
      }
      else
      {
        x.SubItems.Add(s);
      }
    }
    #endregion
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15321643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档