Здравствуйте, novikovs, Вы писали:
N>как узнать внутри функции — вызов произошел из родного потока?
А что есть "родной поток" для функции?
А вообще текущий поток можно получить с помощью System.Threading.Thread.CurrentThread.
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re[2]: как узнать - вызов произошел из родного потока?
HB>А что есть "родной поток" для функции? HB>А вообще текущий поток можно получить с помощью System.Threading.Thread.CurrentThread.
имеется ввиду следующее.
есть функция F, прописанная в классе формы.
там же есть кнопка, по которой я запускаю поток.
функцию F вызываю иногда по кнопкам на форме, иногда из потока.
в зависимости откуда она была вызвана хочется выполнять разные действия....
Re[3]: как узнать - вызов произошел из родного потока?
Здравствуйте, novikovs, Вы писали:
N>Здравствуйте, Hobot Bobot, Вы писали:
HB>>А что есть "родной поток" для функции? HB>>А вообще текущий поток можно получить с помощью System.Threading.Thread.CurrentThread.
N>имеется ввиду следующее. N>есть функция F, прописанная в классе формы. N>там же есть кнопка, по которой я запускаю поток. N>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>в зависимости откуда она была вызвана хочется выполнять разные действия....
А может это разные функции?
Re[3]: как узнать - вызов произошел из родного потока?
Здравствуйте, novikovs, Вы писали:
N>Здравствуйте, Hobot Bobot, Вы писали:
HB>>А что есть "родной поток" для функции? HB>>А вообще текущий поток можно получить с помощью System.Threading.Thread.CurrentThread.
N>имеется ввиду следующее. N>есть функция F, прописанная в классе формы. N>там же есть кнопка, по которой я запускаю поток. N>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>в зависимости откуда она была вызвана хочется выполнять разные действия....
Когда создаешь форму сохрани где-то значение System.Threading.Thread.CurrentThread.GetHashCode().
При вызове функции опять вызывай System.Threading.Thread.CurrentThread.GetHashCode() и сравнивай с сохраненным значением. Если совпадают — функция вызвана из потока, в котором создавалась форма.
GetHashCode provides identification for managed threads. For the lifetime of your thread, it will not collide with the value from any other thread, regardless of the application domain from which you obtain the value.
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re[4]: как узнать - вызов произошел из родного потока?
Здравствуйте, Hobot Bobot, Вы писали:
HB>Здравствуйте, novikovs, Вы писали:
N>>Здравствуйте, Hobot Bobot, Вы писали:
HB>>>А что есть "родной поток" для функции? HB>>>А вообще текущий поток можно получить с помощью System.Threading.Thread.CurrentThread.
N>>имеется ввиду следующее. N>>есть функция F, прописанная в классе формы. N>>там же есть кнопка, по которой я запускаю поток. N>>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>>в зависимости откуда она была вызвана хочется выполнять разные действия....
HB>Когда создаешь форму сохрани где-то значение System.Threading.Thread.CurrentThread.GetHashCode(). HB>При вызове функции опять вызывай System.Threading.Thread.CurrentThread.GetHashCode() и сравнивай с сохраненным значением. Если совпадают — функция вызвана из потока, в котором создавалась форма.
HB>
HB>GetHashCode provides identification for managed threads. For the lifetime of your thread, it will not collide with the value from any other thread, regardless of the application domain from which you obtain the value.
Thread.CurrentThread.ManagedThreadId?
Re[3]: как узнать - вызов произошел из родного потока?
Здравствуйте, novikovs, Вы писали:
N>имеется ввиду следующее. N>есть функция F, прописанная в классе формы. N>там же есть кнопка, по которой я запускаю поток. N>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>в зависимости откуда она была вызвана хочется выполнять разные действия....
Год назад решал подобную проблему, только на уровне процессов. Вкратце, у меня был exe с названием game. Я хотел чтобы при запуске game.exe /farcry запускалась игра FarCry, а при запуске game.exe /hl2 — HalfLife2. В перспективе, хотел еще и опцию /vs, если вдруг начальство рядом начинало ходить... Эх, так и не смог реализовать такую вещь.
Re[3]: как узнать - вызов произошел из родного потока?
От:
Аноним
Дата:
01.09.05 13:30
Оценка:
Здравствуйте, novikovs, Вы писали:
N>имеется ввиду следующее. N>есть функция F, прописанная в классе формы. N>там же есть кнопка, по которой я запускаю поток. N>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>в зависимости откуда она была вызвана хочется выполнять разные действия....
посмотри InvokeRequired
Re[5]: как узнать - вызов произошел из родного потока?
Здравствуйте, MusikFactory, Вы писали:
MF>Thread.CurrentThread.ManagedThreadId?
У меня FW 1.1, там вроде этого нет.
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re[3]: как узнать - вызов произошел из родного потока?
Здравствуйте, novikovs, Вы писали:
N>имеется ввиду следующее. N>есть функция F, прописанная в классе формы. N>там же есть кнопка, по которой я запускаю поток. N>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>в зависимости откуда она была вызвана хочется выполнять разные действия....
Проверять в главном ли потоке вызвана данная функция можно через
св-во InvokeRequired.
Re[4]: как узнать - вызов произошел из родного потока?
Здравствуйте, Fomka, Вы писали:
F>Здравствуйте, novikovs, Вы писали:
N>>имеется ввиду следующее. N>>есть функция F, прописанная в классе формы. N>>там же есть кнопка, по которой я запускаю поток. N>>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>>в зависимости откуда она была вызвана хочется выполнять разные действия....
F>Проверять в главном ли потоке вызвана данная функция можно через F>св-во InvokeRequired.
а не Thread.AppartmentState ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
-----------------------------------------
тут может быть ваша реклама
Re[5]: как узнать - вызов произошел из родного потока?
Здравствуйте, nauro, Вы писали:
N>а не Thread.AppartmentState ?
Нет. А на что вы собираетесь его проверять?
Если функция находится в классе формы, то можно проверять св-во
InvokeRequired, отнаследованное от Control. Это св-во показывает,
нужно ли маршалить вызов метода элемента управления, в данном случае
формы, в главный поток или нет для работы с элементами управления.
Вот выдержка из MSDN
Controls in Windows Forms are bound to a specific thread and are not thread safe. Therefore, if you are calling a control's method from a different thread, you must use one of the control's invoke methods to marshal the call to the proper thread. This property can be used to determine if you must call an invoke method, which can be useful if you do not know what thread owns a control. There are four methods on a control that are safe to call from any thread: Invoke, BeginInvoke, EndInvoke and CreateGraphics. For all other method calls, you should use one of these invoke methods when calling from a different thread.
Здравствуйте, novikovs, Вы писали:
N>имеется ввиду следующее. N>есть функция F, прописанная в классе формы. N>там же есть кнопка, по которой я запускаю поток. N>функцию F вызываю иногда по кнопкам на форме, иногда из потока. N>в зависимости откуда она была вызвана хочется выполнять разные действия....
Любой нити можно присвоить уникальное имя. См. Thread.Name Property