Говоря об аутентификации и авторизации, вы должны создать собственную реализацию IPrincipal и IIdentity, которые затем задаются в потоке ( Thread.CurrentThread ).
IPrincipal идет в потоке, и он удерживает ваш IIdentity. Ваша реализация может быть запрошена, чтобы определить, аутентифицирован ли пользователь и что ему разрешено делать (см. IsInRole).
Что касается использования глобальных переменных для хранения информации, это не очень хорошая идея. Тем не менее, вы начинаете, так что это может быть полезно для вас.
В качестве альтернативы, вы можете создать открытые свойства в ваших формах, где вы их установили, и после закрытия формы получить результаты действий пользователя над формой (не забывайте, что форма - это объект, как и все остальное). Таким образом, если форма A создает экземпляр формы B, показывает B модально, а затем возвращает контроль после закрытия формы B, форма A может затем получить результаты (независимо от того, что они есть) взаимодействия с пользователем из свойств на B.
public class B : Form
{
// Set when the user completes a sale and closes the form with the OK button.
public SaleItem Sale{ get; private set;}
}
Это намного лучше, чем использование глобального хранилища для переменных. Если бы я делал это, я бы использовал инфраструктуру внедрения зависимостей, такую как Unity, чтобы получить экземпляры классов, которые обеспечивают функции, такие как продажи, в моем приложении.