我想實現在我的應用程序中更改當前用戶。我有以下代碼:在Winforms應用程序中更改當前用戶的實現
public class Framework
{
private MainForm mainForm = null;
... // other fields
public virtual void run()
{
if (appInitializer!=null)
{
ISecurityManager securityManager = appInitializer.SecurityManager;
if (securityManager!=null)
{
if (securityManager.DoLogin())
{
RegisterDefaultActionsGroup();
InitializePlugins(appInitializer.Plugins);
// Apply rights for user
ActionsManager.Inst.ApplySecurity(securityManager, securityManager.CurrentUser);
mainForm = new MainForm();
mainForm.Text = appInitializer.ApplicationTitle;
if (appInitializer.ApplicationIcon != null)
{
mainForm.Icon = appInitializer.ApplicationIcon;
}
CorrectFormSizes(mainForm);
Context[Constants.MainForm] = mainForm;
MenuManager.Inst.FillMenu(DefaultGroups.MAIN_MENU, mainForm.MainMenu, ActionClick);
if(appInitializer.IsHaveToCreatePanelInfo) PanelInfoManager.Inst.FillInfo(mainForm);
if (appInitializer.IsHaveToCreateToolBar)
{
MenuManager.Inst.FillToolbar(DefaultGroups.MAIN_TOOLBAR, mainForm.MainToolStrip, ActionClick);
}
mainForm.MainToolStrip.Visible = mainForm.MainToolStrip.Items.Count > 0;
NotifyPluginsAboutShowing(appInitializer.Plugins);
Application.Run(mainForm);
}
}
}
}
...//other methods
}
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Framework framework = new Framework(new EArchiveInitializer());
framework.run();
}
}
在爲改變用戶的按鍵我有:
Framework.Instance.MainForm.MainMenuStrip.Items.Clear();
Framework.Instance.run();
但是,我得到了錯誤:Starting a second message loop on a single thread is not a valid operation. Use Form.ShowDialog instead.
我知道那意味着這個錯誤,但我不能重寫我的代碼。 你能幫我嗎?
謝謝。
SOLUTION: 重寫最後一行run
方法:
if (!Application.MessageLoop)
Application.Run(mainForm);
else
mainForm.Show();
感謝喬納森。
你可以啓動另一個程序副本'Process.Start')並殺死當前正在運行的副本?如果你想避免重寫所有代碼來支持多個用戶,那可能是最簡單的方法。 –
在不同的線程中運行第二個實例可能會有所幫助 – Sandy
@Merlyn Morgan-Graham:不,因爲應用程序的啓動時間約爲10-15秒。 – user348173