ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с C#
  #1  
Старый 04.10.2007, 14:35
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
По умолчанию Проблема с C#

[С#]
Такая проблема. Во время выполнения ресурсоёмкой операции (напр, генерации множества паролей в файл) программа полностью "зависает" - нельзя нажимать кнопки и т.д. Как это исправить?
Нужно чтобы я мог добавить кнопку отмены операции, выводить прогресс операции (сколько паролей сгенерировано)...

Программа построена на таком принципе:
PHP код:
button_click()
{
   for (... 
число паролей)
   {
       
генерация паролей;
       
запись в файл;
   }

Огромная просьба не флеймить.
 
Ответить с цитированием

  #2  
Старый 04.10.2007, 14:37
inv
Banned
Регистрация: 03.08.2007
Сообщений: 313
Провел на форуме:
951141

Репутация: 291
По умолчанию

1 поток ..асинхронная работа
2 не по теме ,автор почему ты и многие не могут прочитать не одной книжки перед тем как садиться что-то писать.
3.гугл-)

Последний раз редактировалось inv; 04.10.2007 в 16:54.. Причина: опечатки
 
Ответить с цитированием

  #3  
Старый 04.10.2007, 18:07
inv
Banned
Регистрация: 03.08.2007
Сообщений: 313
Провел на форуме:
951141

Репутация: 291
По умолчанию

в одном потоке генерация паролей и изменение прогресс бара

кнопочка стоп меняет какую-то переменную которая явлется флагом для цикла в первом потоке

замечание
--единственное токо надо учесть обращение к флагу из разных потоков.........


примерно так например.
 
Ответить с цитированием

  #4  
Старый 04.10.2007, 18:18
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Графика вся - в 1 поток.
 
Ответить с цитированием

  #5  
Старый 04.10.2007, 20:53
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме:
1469995

Репутация: 589
Отправить сообщение для Helios с помощью ICQ
По умолчанию

юзай BackgroundWorker - компонент из .NetFramework, позволяет выполнять методы в отдельных потоках в фоне и передавать из них данные о состоянии работы в основной поток.

В MSDN работа с ним довольно хорошо описана + примеры.
 
Ответить с цитированием

  #6  
Старый 05.10.2007, 09:20
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
2. Дана формула:
float d = 1 / 260;
d получается равным 0.0
Что за бред? пробовал менять тип float на double и decimal - не помогло.
А все просто. 1/2 тоже равна нулю, 1/3 тоже.

Анализ выражения 1/260 начинается с определения типов операндов. Оба типа - int, поэтому результат будет тоже типа инт. Производится целочисленное деление с отбрасыванием дробной части - результат 0, потом он преобразовывается к типу float и получается 0.0

Выход - нужно делить не целые числа, а дробные. 1.0/260.0

Цитата:
вот примерный код:
PHP код:
void gendic()
{
<текст метода>
}

void button1_Click()
{
Thread t = new Thread(gendic);
t.Start();
}
void button2_Click()
{
<ОСТАНОВКА ПОТОКА> // ???
}
Собственно C# не знаю, но догадываюсь, что объект t стоит сделать глобальным и в button2_Click() вызвать какойто его метод, отвечающий за остановку потока
 
Ответить с цитированием

  #7  
Старый 05.10.2007, 15:44
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме:
1469995

Репутация: 589
Отправить сообщение для Helios с помощью ICQ
По умолчанию

Метод gendic, равно как и элемент класса t, должен быть статическим, то есть мог вызываться без создания объекта данного класса.

Вот тебе пример из MSDN, комменты прилагаются.
Код:
using System;
using System.Threading;

public class Worker
{
    // This method will be called when the thread is started.
    public void DoWork()
    {
        while (!_shouldStop)
        {
            Console.WriteLine("worker thread: working...");
        }
        Console.WriteLine("worker thread: terminating gracefully.");
    }
    public void RequestStop()
    {
        _shouldStop = true;
    }
    // Volatile is used as hint to the compiler that this data
    // member will be accessed by multiple threads.
    private volatile bool _shouldStop;
}

public class WorkerThreadExample
{
    static void Main()
    {
        // Create the thread object. This does not start the thread.
        Worker workerObject = new Worker();
        Thread workerThread = new Thread(workerObject.DoWork);

        // Start the worker thread.
        workerThread.Start();
        Console.WriteLine("main thread: Starting worker thread...");

        // Loop until worker thread activates.
        while (!workerThread.IsAlive);

        // Put the main thread to sleep for 1 millisecond to
        // allow the worker thread to do some work:
        Thread.Sleep(1);

        // Request that the worker thread stop itself:
        workerObject.RequestStop();

        // Use the Join method to block the current thread 
        // until the object's thread terminates.
        workerThread.Join();
        Console.WriteLine("main thread: Worker thread has terminated.");
    }
}
Результат работы:

Цитата:
main thread: starting worker thread...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: working...
worker thread: terminating gracefully...
main thread: worker thread has terminated
 
Ответить с цитированием

  #8  
Старый 05.10.2007, 15:54
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

метод позволяет "снимать" визуальный эффект "висячки" Application.DoEvent();

пауза с помощью метода Interrupt
отмена потока с помощью Abort

О потоках на русском языке http://rsdn.ru/article/dotnet/CSThreading1.xml
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...

Последний раз редактировалось W!z@rD; 06.10.2007 в 18:12..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с icq reider ICQ 6 16.08.2007 14:47
проблема RocketV1_0 КИРЮХА ! Схемы и программы 0 10.06.2006 23:48
Hydra проблема с брутом Utochka Уязвимости 2 02.03.2006 23:37
Проблема Mac OS X не только в Safari DRON-ANARCHY Мировые новости 0 23.02.2006 21:12
Проблема с перл Эксплойтом для ipb 2.0.* SURRENDER Форумы 2 07.12.2004 12:58



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ