最近在項目中要用到子線程運作結束向主線程通知的需求,利用線程上下文來實作線程之間的同步。
子線程結束後調用同步函數,向主線程發送時間字元串,改變主窗體的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); //通知主線程