Лев Розанов: схематично
while (userid != null)
select userid = userid from users where refid = userid;
От текущего пользователя поднимаетесь вверх по истории приглашений
xreset: Если работа почасовая и вам кажется, что это займет много времени. То в этом контексте, указав примерный временной обьем работ и вашу ставку, будет корректно спросить укладывается клиент в бюджет. Упомянув, что можно и убрать некоторые примочки, что не так и важны в проекте.
Борис Белов: Взамен прямого изменения img делаете .fadeOut( [duration ] [, complete ] ), в complete функции меняете для img src и снова .fadeIn. Только придется придумать логику если mouseout раньше пришел.
sqliteman: CREATE PROCEDURE createTableFact ( @name int ) - тип int. Если вы хотите чтобы наименование таблицы было цифрой, то надо писать в квадратных скобках (пример [1])
astrotrain: Так одним из параметров Post и есть делегат на Method. Выполните Post последним действием в потоке. А в методе можете еще и для полной уверенности сделать t.Join();
Полная последовательность:
1. Инициализируете SynchronizationContext
2. Создаете поток t = new Thread(calculate());
3. Запускаете
4. В методе calculate() { <делаете действия>; synchContext.Post(Method, data); }
5. В методе Method() { <делаете то, что нужно после завершения потока>; }
Sushkov: Так вы делаете sqlConnection1.Close(); а потом возвращаете из функции return reader; А так делать нельзя. Уберите sqlConnection1.Close(); из функции
astrotrain: Т.е. вам нужна просто нотификация от потока о том, что он завершил свою работу?
var synchContext = AsyncOperationManager.SynchronizationContext; - должен быть получен в UI потоке
и вызов из потока synchContext.Post(Method, data);