AFAIK, в Vb.Net нет ассоциативных массивов. Я думаю, что вы должны использовать словарь со строкой в качестве ключа.
Инициализация должна выглядеть следующим образом:
Dim myNewDictionary As new Dictionary(Of string, string)
Тогда вы можете просто добавить к нему элементы, используя .add ():
myNewDictionary.Add("someStringAsKey", "someStringAsValue")
Документы Microsoft о Словаре: [112 ] https://docs.microsoft.com/es-es/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.7.2
PS. Извините за любые опечатки или опечатки, английский не мой основной язык.
Вы могли добавить личное сообщение к основному рамочному окну и 'попросить', чтобы это обновило строку состояния. Потоку был бы нужен дескриптор главного окна (не используйте объект CWnd, поскольку это не будет ориентировано на многопотоковое исполнение). Вот некоторый пример кода:
static UINT CMainFrame::UpdateStatusBarProc(LPVOID pParam);
void CMainFrame::OnCreateTestThread()
{
// Create the thread and pass the window handle
AfxBeginThread(UpdateStatusBarProc, m_hWnd);
}
LRESULT CMainFrame::OnUser(WPARAM wParam, LPARAM)
{
// Load string and update status bar
CString str;
VERIFY(str.LoadString(wParam));
m_wndStatusBar.SetPaneText(0, str);
return 0;
}
// Thread proc
UINT CMainFrame::UpdateStatusBarProc(LPVOID pParam)
{
const HWND hMainFrame = reinterpret_cast<HWND>(pParam);
ASSERT(hMainFrame != NULL);
::PostMessage(hMainFrame, WM_USER, IDS_STATUS_STRING);
return 0;
}
Код из памяти, поскольку у меня нет доступа к компилятору здесь дома, таким образом, извинения теперь за любые ошибки.
Вместо использования WM_USER
Вы могли зарегистрировать свое собственное сообщение Windows:
UINT WM_MY_MESSAGE = ::RegisterWindowsMessage(_T("WM_MY_MESSAGE"));
Сделайте выше статического члена CMainFrame
например.
Если использование строковых ресурсов является слишком основным, затем имеют поток, выделяют строку на "куче" и удостоверяются, что функция обновления CMainFrame удаляет его, например:
// Thread proc
UINT CMainFrame::UpdateStatusBarProc(LPVOID pParam)
{
const HWND hMainFrame = reinterpret_cast<HWND>(pParam);
ASSERT(hMainFrame != NULL);
CString* pString = new CString;
*pString = _T("Hello, world!");
::PostMessage(hMainFrame, WM_USER, 0, reinterpret_cast<LPARAM>(pString));
return 0;
}
LRESULT CMainFrame::OnUser(WPARAM, LPARAM lParam)
{
CString* pString = reinterpret_cast<CString*>(lParam);
ASSERT(pString != NULL);
m_wndStatusBar.SetPaneText(0, *pString);
delete pString;
return 0;
}
Не прекрасный, но это - запуск.
Необходимо использовать сообщение (или с, Отправляют - или PostMessage) уведомлять поток UI, что текст строки состояния должен быть обновлен. Не пытайтесь обновить элементы UI от рабочего потока, он обязан причинить Вам боль.
Возможно, это может помочь Вам: Как получить доступ к элементам UI от потока в MFC.
Я не кодирую C++ / MFC сам, но я испытал подобную проблему в C#, который известен как перекрестный поток обновление GUI.