Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2010, 14:17   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию Thread. проблемы с работой потока. Моментально исчезают созданные в потоке формы.

Вот, что должно происходить: Создаётся форма, отображает на себе ранее сделанный скриншот, вторая закрашенная в какой либо цвет форма появляется сверху и она прозрачная, получается эффект "тёмных очков" (скажем так). Если я это делаю не в потоке, то у меня всё работает, то есть на экране две формы и я выделяю прямоугольную область на форме, всё работает. А вот в потоке, просто моментально исчезает всё с экрана, а при повторном нажатии на кнопке, пишет:
Цитата:
Поток выполняется или прерван; его нельзя запустить повторно.
по идее будет так: Нажимаю горячую клавишу, происходит, то что сейчас в примере происходит в private void button1_Click(object sender, EventArgs e) я делаю скриншот выделенной области и всё поток должен завершаться и так снова при следующем нажатии, а у меня только 1 раз возможно нажать и то ничего на экране не появляется.

Код:
        Thread thr = new Thread(new ThreadStart(SelectRectImage));

        private void button1_Click(object sender, EventArgs e)
        {
            Hooks._hookID = Hooks.SetHook(Hooks._proc);
            thr.Start();
        }

        private static void SelectRectImage()
        {
            FormBackgroundScreen frmBackground; //форма принимающая на себя скриншот
            FormTopScreenshot frmTopScreenshot;
            frmBackground = new FormBackgroundScreen();
            frmTopScreenshot = new FormTopScreenshot();
            ScreenshotMaker sm = new ScreenshotMaker();

            //frmBackground.Owner = ;
            frmBackground.BackgroundImage = sm.ImageFromScreen();
            frmBackground.Size = Screen.PrimaryScreen.Bounds.Size;
            frmBackground.TopMost = true;
            frmBackground.WindowState = FormWindowState.Maximized;
            frmBackground.Show();

            //чтобы верхняя прозрачная форма была всегда сверху формы frmBackground
            frmTopScreenshot.Owner = frmBackground;

            frmTopScreenshot.Size = Screen.PrimaryScreen.Bounds.Size;
            frmTopScreenshot.TopMost = true;
            frmTopScreenshot.WindowState = FormWindowState.Maximized;
            frmTopScreenshot.Cursor = Cursors.Cross;
            frmTopScreenshot.Show();            
        }
Как это исправить? Какие могут быть причины?

Последний раз редактировалось Casper-SC; 09.04.2010 в 14:19.
Casper-SC вне форума Ответить с цитированием
Старый 09.04.2010, 16:05   #2
Teksa
Пользователь
 
Регистрация: 24.08.2007
Сообщений: 88
По умолчанию

на нажатие кнопки хоршо бы проверять свойство IsAlive запускаемого потока, а насчет того что пропадает -возможно поток своей смертью умирает вместе с формой, добавь для интереса ожидание какого нибудь AutoResetEvent'а после show формы.
Teksa вне форума Ответить с цитированием
Старый 09.04.2010, 18:26   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Я бы так не поступил никогда. Обычно делается так:
1. Главный поток выполняет GUI (все окна, "формы")
2. Другие потоки (дочерние) выполняют различные долговременные операции.
Думаю поняли идею, если выполнить данные пункты, то ваш вопрос да и сама проблема просто бы не возникли.
Разумеется Вам решать как поступить.
BOBAH13 вне форума Ответить с цитированием
Старый 24.04.2010, 12:28   #4
Arnezami
Форумчанин
 
Регистрация: 04.10.2009
Сообщений: 147
Восклицание

new Thread(new MyForm().ShowDialog).Start(); //Отобразиться и ничего не будет пропадать! Правда окно будет не модальным, ну это понятно по логике вещей!
Ув. Форумчане! Если мои советы были Вам полезны, не забывайте благодарить в виде повышение рейтинга!!!
http://vkontakte.ru/id6715558
Arnezami вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уничтожать созданные формы при закрытии? Как? TwiX Общие вопросы Delphi 4 09.04.2010 09:49
Как лучше всего освобождать созданные в потоке объекты? TwiX Общие вопросы Delphi 2 13.03.2010 21:27
Проблемы с работой с курсором. anger Помощь студентам 9 13.05.2009 09:50
Проблемы с дипломной работой HAMMAN Помощь студентам 3 16.05.2008 12:38
Запрос к БД в отдельном потоке (Thread) tyrell lab БД в Delphi 1 14.06.2007 08:42