■ 크로스 스레드(Cross Thread) 처리하기 예제

----------------------------------------------------------------------------------------------------

using System.Windows.Forms;


private TextBox textBox;

 

...

 

this.textBox.ExecuteUIThread(control => { control.Text = "SOME MESSAGE"; });

----------------------------------------------------------------------------------------------------

 

■ 크로스 스레드(Cross Thread) 처리하기

----------------------------------------------------------------------------------------------------

using System.ComponentModel;

 

/// <summary>

/// 컨트롤 확장

/// </summary>

public static class ControlExtension

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Delegate

    //////////////////////////////////////////////////////////////////////////////// Public

 

    #region UI 스레드 실행하기 대리자 - ExecuteUIThreadDelegate

 

    /// <summary>

    /// UI 스레드 실행하기 대리자

    /// </summary>

    /// <typeparam name="T">객체 타입</typeparam>

    /// <param name="source">소스 객체</param>

    public delegate void ExecuteUIThreadDelegate<T>(T source) where T : ISynchronizeInvoke;

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method

    ////////////////////////////////////////////////////////////////////////////////////////// Static

    //////////////////////////////////////////////////////////////////////////////// Public

 

    #region UI 스레드 실행하기 - ExecuteUIThread<T>(source, executeUIThreadDelegate)

 

    /// <summary>

    /// UI 스레드 실행하기

    /// </summary>

    /// <typeparam name="T">객체 타입</typeparam>

    /// <param name="source">소스 객체</param>

    /// <param name="executeUIThreadDelegate">UI 스레드 실행하기 대리자</param>

    public static void ExecuteUIThread<T>(this T source, ExecuteUIThreadDelegate<T> executeUIThreadDelegate) where T : ISynchronizeInvoke

    {

        if(source.InvokeRequired)

        {

            source.Invoke(executeUIThreadDelegate, new object[] { source });

        }

        else

        {

            executeUIThreadDelegate(source);

        }            

    }

 

    #endregion

}

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요