C# 데스크톱 UI를 사용한 비동기식 상호 작용

3110 단어 UIC#비동기
public partial class f_main : Form
    {
        public f_main()
        {
            InitializeComponent();

        }
        /// <summary>
        ///     ,       
        /// </summary>
        public void StartWorkWithThread()
        {
            for (int i = 0; i < 20; i++)
            {
                // ....      ,   ....
                Annunciator<TextBox, string>(tb_info, ControlDoInfo, "id = " + i.ToString() + " time = " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                System.Threading.Thread.Sleep(500);
            }
        }
        /// <summary>
        ///      ,           
        ///       ,   (StartWorkWithThread()),
        ///      (ControlDoInfo(string info))
        /// </summary>
        /// <typeparam name="TControl">      ,   Control</typeparam>
        /// <typeparam name="TData">      </typeparam>
        /// <param name="control">    </param>
        /// <param name="doAction">         </param>
        /// <param name="info">     (         )</param>
        public void Annunciator<TControl, TData>(TControl control, Action<TData> doAction, TData info) where TControl : Control
        {
            if (control.InvokeRequired)
            {
                Action<TData> doIt = doAction;
                control.Invoke(doIt, info);
            }
            else
            {
                doAction(info);
            }
        }
        /// <summary>
        ///         ,
        /// </summary>
        /// <param name="i"></param>
        public void ControlDoInfo(string info)
        {
            tb_info.AppendText(info + "
");         }         /// <summary>         ///          /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void button1_Click(object sender, EventArgs e)         {             //             System.Threading.Thread th = new System.Threading.Thread(StartWorkWithThread);             th.Start();         }     }
//    ,    , Control      
public static class ExpandFunction
    {
        public static void Annunciator<TData>(this Control control, Action<TData> doAction, TData info)
        {
            if (control.InvokeRequired)
            {
                Action<TData> doIt = doAction;
                control.Invoke(doIt, info);
            }
            else
            {
                doAction(info);
            }
        }
    }
//              
public void Log(string info)
        {
            //              ,        
            //(str) => { tb_info.AppendText(str + "
"); }             //info              tb_info.Annunciator<string>((str) => { tb_info.AppendText(str + "
"); }, info);         } //   Log  Action      。

좋은 웹페이지 즐겨찾기