天天看點

C# 子線程與主線程通訊方法一

最近在項目中要用到子線程運作結束向主線程通知的需求,利用線程上下文來實作線程之間的同步。

子線程結束後調用同步函數,向主線程發送時間字元串,改變主窗體的label标簽

label标簽改變事件觸發處理函數,進行顯示;

代碼如下:

主窗體:

public static MainForm comMainForm;    //其他類可以直接調用此窗體的控件

public MainForm()

{

InitializeComponent();

comMainForm = this;

}

//任務中心标簽内容發生更新事件響應

private void taskFreshFlag_TextChanged(object sender, EventArgs e)

labResult.Visible = true;

labResult.Text = DateTime.Now.TimeOfDay.ToString();

工具類:

public class WebServiceConnect

  private static SynchronizationContext mainThreadSynContext;

//此處修改為異步擷取任務方式

public static void GetTaskInfo(string taskInfoIn0)

  mainThreadSynContext = SynchronizationContext.Current;     //目前線程上下文

  taskThread = new Thread(new ParameterizedThreadStart(webConnect));

  taskThread.Start(taskInfoIn0);

//回調函數

private static void CallBack(object state)

//主線程報告資訊

MainForm.comMainForm.taskFreshFlag.Text = "task" + DateTime.Now.TimeOfDay.ToString();

public static void webConnect(object taskInfoIn)

try

  string taskInfoIn0 = taskInfoIn.ToString();

  circle = false;

catch (Exception ex)

  System.Net.WebException wex = ex as System.Net.WebException;

  if (connCount > 1)

  taskThread.Abort();

  System.Windows.Forms.MessageBox.Show("通訊未連接配接!");

  return;

mainThreadSynContext.Post(new SendOrPostCallback(CallBack), null); //通知主線程