0
我編寫了一個簡單的類來生成數組,因爲我需要一些硬編碼的隨機數組用於我自己的調試目的,但是儘管在單獨的工作線程中調用了及時的操作,但我的UI仍然掛起!下面的代碼...線程代碼導致用戶界面掛起
private static Random randGenerator = new Random();
private void generateButton_Click(object sender, EventArgs e)
{
string dataType = "System.";
if (typeComboBox.Text != "Byte")
dataType += signedCheckBox.Checked ? "" : "U";
else if (typeComboBox.Text == "Byte")
dataType += signedCheckBox.Checked ? "S" : "";
dataType += typeComboBox.Text;
generateButton.Enabled = false;
new Thread(() =>
{
Process(Type.GetType(dataType), (int)sizeNumericUpDown.Value, hexCheckBox.Checked);
}).Start();
}
private void Process(Type type, int size, bool hex)
{
StringBuilder sBuilder = new StringBuilder();
sBuilder.Append(string.Format(@"{0}[] values = new {0}[{1}] {{", type.Name, size));
for (int i = 0; i < size; i++)
{
int random = randGenerator.Next(0, GetIntegralMaxValue(type));
sBuilder.Append((hex ? "0x" + random.ToString("x2") : random.ToString()) + (i < size - 1 ? ", " : " };"));
}
outputTextBox.BeginInvoke((MethodInvoker)delegate
{
outputTextBox.Text = sBuilder.ToString();
});
}
private int GetIntegralMaxValue(Type type)
{
var field = type.GetField("MaxValue").GetValue(null);
return Convert.ToInt32(field);
}
我想,也許這個問題,試圖訪問主線程上創建所以不是我把它們傳遞給方法的對象撒謊。我也嘗試在類中聲明我的randGenerator對象,但仍然沒有運氣。有誰可以找出問題嗎?
它無限期懸掛?其他的東西是否在後臺運行並嘗試訪問UI線程? –
不僅在操作完成之前。這是我班上唯一的代碼。 –
我們在談論多少數據?如果數量巨大,可能需要很長時間才能更新。一個想法,不過,你可能會在調用之前調用'sBuilder.ToString()':var s = sBuilder.ToString(); ... outputTextBox.Text = s; –