Я довольно новичок в проблеме производителей и потребителей, поэтому прошу прощения.
Я создал образец примера
У меня есть 5 задач в общей сложности - 4 задачи для производителей и 1 задача для потребителя:
SqlConnection sqlConn = new SqlConnection(PANELSPLIT.Properties.Settings.Default.dbConn);
BlockingCollection<KeyValuePair<string, string>> dataItems = new BlockingCollection<KeyValuePair<string, string>>(54);
private KeyValuePair<string, string> bc1;
private delegate void updateTextBox1(string imagepath);
private delegate void updateTextBox2(string imagepath);
private delegate void updateTextBox3(string imagepath);
private delegate void updateTextBox4(string imagepath);
private void Form1_Load(object sender, EventArgs e)
{
var t1 = Task.Factory.StartNew(()=> addition());
var t2 = Task.Factory.StartNew(() => subtraction());
var t3 = Task.Factory.StartNew(() => multiply());
var t4 = Task.Factory.StartNew(() => divide());
var t5 = Task.Factory.StartNew(() => consumer());
}
private void consumer()
{
while (true)
{
if (dataItems.TryTake(out bc1)){
Console.WriteLine(bc1.ToString());
if(bc1.Key== "addition")
{
updateTextBox1 tb1 = new updateTextBox1(updatetb1);
this.textBox1.BeginInvoke(tb1, bc1.Value);
}
else if(bc1.Key == "Multiply")
{
updateTextBox1 tb2 = new updateTextBox1(updatetb2);
this.textBox2.BeginInvoke(tb2, bc1.Value);
}
else if (bc1.Key == "Divide")
{
updateTextBox1 tb3 = new updateTextBox1(updatetb3);
this.textBox1.BeginInvoke(tb3, bc1.Value);
}
else
{
updateTextBox1 tb4 = new updateTextBox1(updatetb4);
this.textBox1.BeginInvoke(tb4, bc1.Value);
}
}
else
{
Console.WriteLine("Empty");
}
}
}
private void updatetb4(string imagepath)
{
this.textBox4.Text = imagepath;
}
private void updatetb3(string imagepath)
{
this.textBox3.Text = imagepath;
}
private void updatetb2(string imagepath)
{
this.textBox2.Text = imagepath;
}
private void updatetb1(string imagepath)
{
this.textBox1.Text = imagepath;
}
private void divide()
{
int a = 6;
int b = 2;
dataItems.Add(new KeyValuePair<string, string>("Divide", (a/b).ToString()));
}
private void multiply()
{
int a = 6;
int b = 2;
dataItems.Add(new KeyValuePair<string, string>("Multiply", (a * b).ToString()));
}
private void subtraction()
{
int a = 6;
int b = 2;
dataItems.Add(new KeyValuePair<string, string>("subtraction", (a - b).ToString()));
}
private void addition()
{
int a = 6;
int b = 2;
dataItems.Add(new KeyValuePair<string, string>("addition", (a + b).ToString()));
}
Я хочу сохранить эти значения в моей базе данных, поэтому я создал таблицу в sqlserver: Numb с 4 столбцами - id,Addition,Multiply,Divide,Subtraction
.
Таким образом, потребитель добавляет значение в коллекцию в таблицу для конкретного примера datacell: если ключ был «добавлением», тогда bc1.value должен быть вставлен в datacell = 1 и так далее для других.
Вопросы
Как мне это реализовать?
Кроме того, как мне поддерживать согласованность в базе данных?