1
儘管此代碼運行時我不能移動或在我的UI做任何事情:Task.StartNew保持主線程,同時運行
var a = txtLot.Text;
var b = cmbMcu.SelectedItem.ToString();
var c = cmbLocn.SelectedItem.ToString();
var itm = Task<JDEItemLotAvailability>
.Factory.StartNew(() =>
{
btnCheck.BackColor = Color.Red;
var ret = Dal.GetLotAvailabilityF41021(a, b, c);
btnCheck.BackColor = Color.Transparent;
return ret;
}
);
lblDescriptionValue.Text = itm.Result.Description;
lblItemCodeValue.Text = itm.Result.Code;
lblQuantityValue.Text = itm.Result.AvailableQuantity.ToString();
我試圖講評調用DAL方法,並把Thread.sleep代碼( 5000),但我仍然無法移動表格。
編輯:也許我用錯誤的方式來取回結果?
UPDATE:
第一應答(約翰)我想在此之後:
var a = txtLot.Text;
var b = cmbMcu.SelectedItem.ToString();
var c = cmbLocn.SelectedItem.ToString();
var itm = Task<JDEItemLotAvailability>
.Factory.StartNew(() =>
{
btnCheck.BackColor = Color.Red;
var ret = Dal.GetLotAvailabilityF41021(a, b, c);
btnCheck.BackColor = Color.Transparent;
return ret;
}
).ContinueWith(itm =>
{
lblDescriptionValue.Text = itm.Result.Description;
lblItemCodeValue.Text = itm.Result.Code;
lblQuantityValue.Text = itm.Result.AvailableQuantity.ToString();
});
,但當然我又搞亂UI ....形式凍結走了,但是當任務完成異常發生
我明白了,我不能使用4.5,因爲我需要的應用程序對一些XP的機器上運行,所以我會堅持使用Task類。你能告訴我更多關於如何從代碼中刪除任何UI元素並使用continuewith?我嘗試使用它,但我仍然收到錯誤..(我正在更新第二次嘗試 – e4rthdog
呃,首先你要做的是將背景顏色設置爲紅色 - 所以在開始任務前就這樣做。可以在完成時將其設置爲透明,我將使用一些示例代碼進行編輯 –
謝謝,如果您能展示我將與ContinueWith做什麼(結果是我的意思)謝謝 – e4rthdog