Простой способ:
public IDictionary<T, V> toDictionary<T, V>(Object objAttached)
{
var dicCurrent = new Dictionary<T, V>();
foreach (DictionaryEntry dicData in (objAttached as IDictionary))
{
dicCurrent.Add((T)dicData.Key, (V)dicData.Value);
}
return dicCurrent;
}
Используйте следующий код, если вы используете приложение MFC.
if(GetCurrentThreadId() == AfxGetApp()->m_nThreadID)
{
//Main Thread
}
else
{
//Not Main Thread
}
Используйте GetCurrentThread () или GetCurrentTreadId () и сравните его с известным HANDLE или идентификатором основного потока.
Не может быть несколько пользовательских интерфейсов потоки?
Конечно, может, но только один основной поток пользовательского интерфейса.
Хорошо. Но есть ли способ узнать HANDLE или ID основного потока из этот код? Я имею в виду что-то вроде GetMainThread или GetMainThreadID. я не хотел бы изменять другие части приложения (по возможности). Кстати, Спасибо за ответ.
Извините, я был на обеде, а вы уже получили свой ответ. Но все равно мог бы ответить. GetCurrentThreadId (), конечно, можно использовать во время выполнения вашего основного потока пользовательского интерфейса и кэшировать для последующего сравнения. Где-то во время выполнения вашего приложения будет только один поток, например, в WinMain () до того, как будет создан любой другой поток.
Ура!