Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с данными в BackgroundWorker, WinForms 
V
    Опции темы
IEZ
Дата 8.2.2012, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Приветствую Всех!
Есть проект (можно сказать большой по количеству строк), поэтому нет возможности
выложить его в тему. Поэтому накидал мини проект, где попытался изложить суть проблемы.
Второй день колбашусь, не могу понять из-за чего так происходит и как это лечить.
И так к делу.
Вот код:
Код

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace BackgroundWorkerTest
{
    public partial class BackgroundWorkerTest : Form
    {
        #region Private members
        [DllImport("kernel32", CharSet = CharSet.Auto)]
        private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
        #endregion

        static int interval = 2000;
        static bool btimer1 = false;
        static bool btimer2 = false;
        static bool btimer3 = false;
        static bool btimer4 = false;

        Data data = null;

        public BackgroundWorkerTest()
        {
            InitializeComponent();
        }

        private void BackgroundWorkerTest_Load(object sender, EventArgs e)
        {
            timer1.Interval = interval;
            timer2.Interval = interval;
            timer3.Interval = interval;
            timer4.Interval = interval;
        }


        private void start_Click(object sender, EventArgs e)
        {
            start.Enabled = false;

            timer1.Enabled = true;
            timer2.Enabled = true;
            timer3.Enabled = true;
            timer4.Enabled = true;

            exit.Enabled = true;
        }

        private void exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if ((btimer1 == false) && (!bgw1.IsBusy))
            {
                timer1.Enabled = false;
                btimer1 = true;
                bgw1.RunWorkerAsync(1);
                btimer1 = false;
            }
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            if ((btimer2 == false) && (!bgw2.IsBusy))
            {
                timer2.Enabled = false;
                btimer2 = true;
                bgw2.RunWorkerAsync(2);
                btimer2 = false;
            }
        }

        private void timer3_Tick(object sender, EventArgs e)
        {
            if ((btimer3 == false) && (!bgw3.IsBusy))
            {
                timer3.Enabled = false;
                btimer3 = true;
                bgw3.RunWorkerAsync(3);
                btimer3 = false;
            }
        }

        private void timer4_Tick(object sender, EventArgs e)
        {
            if ((btimer4 == false) && (!bgw4.IsBusy))
            {
                timer4.Enabled = false;
                btimer4 = true;
                bgw4.RunWorkerAsync(4);
                btimer4 = false;
            }
        }

        private void bgw1_DoWork(object sender, DoWorkEventArgs e)
        {
            int number = (int)e.Argument;
            BackgroundWorker bgw = sender as BackgroundWorker;
            ProcessData(number);
            bgw.CancelAsync();
        }

        private void bgw2_DoWork(object sender, DoWorkEventArgs e)
        {
            int number = (int)e.Argument;
            BackgroundWorker bgw = sender as BackgroundWorker;
            ProcessData(number);
            bgw.CancelAsync();
        }

        private void bgw3_DoWork(object sender, DoWorkEventArgs e)
        {
            int number = (int)e.Argument;
            BackgroundWorker bgw = sender as BackgroundWorker;
            ProcessData(number);
            bgw.CancelAsync();
        }

        private void bgw4_DoWork(object sender, DoWorkEventArgs e)
        {
            int number = (int)e.Argument;
            BackgroundWorker bgw = sender as BackgroundWorker;
            ProcessData(number);
            bgw.CancelAsync();
        }

        private void ProcessData(int number)
        {
            File.Delete(Application.StartupPath + @"\result" + number.ToString() + ".ini");
            for (int i = 1; i <= 100; i++)
            {
                data = GetData(number);
                WritePrivateProfileString("result", i.ToString(), data.name, Application.StartupPath + @"\result" + number.ToString() + ".ini");
            }
        }

        private Data GetData(int number)
        {
            StringBuilder temp = new StringBuilder(10240);
            Data data = new Data();

            data.name = "data" + number.ToString();

            //GetPrivateProfileString("data", "name", "null", data.name, 10240, Application.StartupPath + @"\data" + number.ToString() + ".ini");

            return data;
        }

        

    }

    class Data
    {
        public string name = null;
    }
}


На выходе должно получиться четыре файла:
  • result1.ini
  • result2.ini
  • result3.ini
  • result4.ini


С содержимым (к примеру)
для result1.ini:
Цитата
[result]
1=data1
2=data1
3=data1
4=data1
.....
97=data1
98=data1
99=data1
100=data1


для result2.ini:
Цитата
[result]
1=data2
2=data2
3=data2
4=data2
.....
97=data2
98=data2
99=data2
100=data2


для result3.ini:
Цитата
[result]
1=data3
2=data3
3=data3
4=data3
.....
97=data3
98=data3
99=data3
100=data3


для result4.ini:
Цитата
[result]
1=data4
2=data4
3=data4
4=data4
.....
97=data4
98=data4
99=data4
100=data4



Но на самом деле результат другой и каждый раз разный (выкладываю как есть):

result1.ini:
Цитата
[result]
1=data1
2=data1
3=data1
4=data1
5=data1
6=data1
7=data1
8=data1
9=data1
10=data1
11=data1
12=data1
13=data1
14=data1
15=data1
16=data1
17=data1
18=data1
19=data1
20=data1
21=data1
22=data1
23=data1
24=data1
25=data1
26=data1
27=data1
28=data1
29=data1
30=data1
31=data1
32=data1
33=data1
34=data1
35=data1
36=data1
37=data1
38=data1
39=data1
40=data1
41=data1
42=data1
43=data1
44=data1
45=data1
46=data1
47=data1
48=data1
49=data1
50=data1
51=data1
52=data1
53=data1
54=data1
55=data1
56=data1
57=data1
58=data1
59=data1
60=data1
61=data1
62=data1
63=data1
64=data1
65=data1
66=data1
67=data1
68=data1
69=data1
70=data1
71=data1
72=data1
73=data1
74=data1
75=data1
76=data1
77=data1
78=data1
79=data1
80=data1
81=data1
82=data1
83=data1
84=data1
85=data1
86=data1
87=data1
88=data1
89=data1
90=data1
91=data1
92=data1
93=data1
94=data1
95=data1
96=data1
97=data1
98=data1
99=data1
100=data1


result2.ini:
Цитата
[result]
1=data2
2=data2
3=data2
4=data2
5=data2
6=data2
7=data2
8=data2
9=data2
10=data2
11=data2
12=data2
13=data2
14=data2
15=data2
16=data2
17=data2
18=data2
19=data2
20=data2
21=data2
22=data2
23=data2
24=data2
25=data2
26=data2
27=data2
28=data2
29=data2
30=data2
31=data2
32=data4
33=data2
34=data2
35=data2
36=data2
37=data2
38=data2
39=data2
40=data2
41=data2
42=data2
43=data2
44=data2
45=data2
46=data2
47=data2
48=data2
49=data2
50=data2
51=data2
52=data2
53=data2
54=data2
55=data2
56=data2
57=data2
58=data2
59=data2
60=data2
61=data2
62=data2
63=data2
64=data2
65=data2
66=data2
67=data2
68=data2
69=data2
70=data2
71=data2
72=data2
73=data2
74=data2
75=data2
76=data2
77=data2
78=data2
79=data2
80=data2
81=data2
82=data2
83=data2
84=data2
85=data2
86=data2
87=data2
88=data2
89=data2
90=data2
91=data2
92=data2
93=data2
94=data2
95=data2
96=data2
97=data2
98=data2
99=data2
100=data2


result3.ini:
Цитата
[result]
1=data3
2=data3
3=data3
4=data3
5=data3
6=data3
7=data3
8=data3
9=data3
10=data3
11=data3
12=data3
13=data3
14=data3
15=data3
16=data3
17=data3
18=data3
19=data3
20=data3
21=data3
22=data3
23=data3
24=data3
25=data3
26=data3
27=data3
28=data3
29=data3
30=data3
31=data3
32=data3
33=data3
34=data3
35=data3
36=data3
37=data3
38=data3
39=data3
40=data3
41=data3
42=data3
43=data3
44=data3
45=data3
46=data3
47=data3
48=data3
49=data3
50=data3
51=data3
52=data3
53=data3
54=data3
55=data3
56=data3
57=data3
58=data3
59=data3
60=data3
61=data3
62=data3
63=data3
64=data3
65=data3
66=data3
67=data3
68=data3
69=data3
70=data3
71=data3
72=data3
73=data3
74=data3
75=data3
76=data3
77=data3
78=data3
79=data3
80=data3
81=data3
82=data3
83=data3
84=data3
85=data3
86=data3
87=data3
88=data3
89=data3
90=data3
91=data3
92=data3
93=data3
94=data3
95=data3
96=data3
97=data3
98=data3
99=data3
100=data3


result4.ini:
Цитата
[result]
1=data4
2=data4
3=data4
4=data4
5=data4
6=data4
7=data4
8=data4
9=data4
10=data4
11=data4
12=data4
13=data4
14=data4
15=data4
16=data4
17=data4
18=data4
19=data4
20=data4
21=data1
22=data4
23=data4
24=data4
25=data4
26=data4
27=data4
28=data4
29=data4
30=data4
31=data4
32=data4
33=data4
34=data4
35=data4
36=data4
37=data4
38=data4
39=data4
40=data4
41=data4
42=data4
43=data4
44=data4
45=data4
46=data4
47=data4
48=data4
49=data4
50=data4
51=data4
52=data4
53=data4
54=data4
55=data4
56=data4
57=data4
58=data4
59=data4
60=data4
61=data4
62=data4
63=data4
64=data4
65=data4
66=data4
67=data4
68=data4
69=data4
70=data4
71=data4
72=data4
73=data4
74=data4
75=data4
76=data4
77=data4
78=data4
79=data4
80=data4
81=data4
82=data1
83=data4
84=data4
85=data4
86=data4
87=data4
88=data4
89=data4
90=data4
91=data4
92=data4
93=data4
94=data4
95=data4
96=data4
97=data4
98=data4
99=data4
100=data4



Что делаю не так?
Спасибо.
P.S. В аттаче сам проект.

Это сообщение отредактировал(а) IEZ - 8.2.2012, 00:29

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  BackgroundWorkerTest.zip 42,82 Kb


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
Voyager
Дата 9.2.2012, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Использование общих ресурсов без синхронизации?
PM   Вверх
IEZ
Дата 13.2.2012, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Цитата(Voyager @  9.2.2012,  15:07 Найти цитируемый пост)
Использование общих ресурсов без синхронизации? 

Да уже разобрался. 
BackgroundWorker и общие ресурсы - это плохо.
Task'и все разрулили.


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0664 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.