所以我有一个程序通过 Windows 表单接收用户凭据,现在通过 MessageBox 我正在显示用户输入,我想要做的是将它传递到我的控制台应用程序中,这样如果用户输入正确的凭据然后它在控制台应用程序中继续,我该怎么做呢?
问问题
3219 次
4 回答
1
您可能需要添加一个 while 循环来在控制台应用程序中查找 txt 文件。在您的 Windows 窗体应用程序中,您可以将成功或失败消息写入 txt 文件。(为安全添加加密)当您写下控制台应用程序应该读取的信息并从那里继续时。
Algorithm:
1.console application start
2. console app while loop until txt file detected
3. forms app show input screen
4. user enter credential
5. write success or failure into txt file
6. read txt file
7. continue based on credential result
8. Remove txt file
由于表单也在控制台应用程序项目中(我从您的措辞中假设)您可以执行以下操作
class Program
{
public static object abc;
static void Main(string[] args)
{
//do something here if required
Form1 frm = new Form1();
if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//login success do what ever on success
Console.WriteLine("Login success");
Console.WriteLine(abc.ToString());
}
else
{
Console.WriteLine("Login failure");
Console.WriteLine(abc.ToString());
//login failure
}
Console.ReadLine();
}
}
以及登录表单类中的登录按钮单击事件
private void Login_Click(object sender, EventArgs e)
{
if(true)
{
Program.abc = "any success object here";
//on successful login
this.DialogResult= System.Windows.Forms.DialogResult.OK;
}
else
{
Program.abc = "any failure object here";
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
}
}
谢谢,
埃森
于 2012-06-08T15:11:30.607 回答
0
您可以在表单应用程序中托管 wcf 服务。然后使控制台应用程序成为客户端。使用 wcf 创建面向服务的系统非常容易。请参阅此处获取教程。如果您遵循这种方法,您将学到很多东西
于 2012-06-08T15:14:58.220 回答
0
使用 IPC(进程间通信)和命名管道。它很容易在两个进程之间实现,请查看http://msdn.microsoft.com/en-us/library/bb546085.aspx
于 2012-06-08T15:19:04.057 回答
0
本质上,您可能必须使用一些本机 Windows API 函数(Alloc/FreeConsole)并使用 WinForms 控制器。
半伪代码:
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool AllocConsole();
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool FreeConsole();
//--- form code
if (Do_validation() && AllocConsole())
{
this.Hide();
this.ShowInTaskbar = false;
Enter_Console_Code();
FreeConsole();
System.Threading.Thread.Sleep(50); //FreeConsole sometimes doesn't finish closing straight away which means your form flickers to the front and then minimizes.
this.ShowInTaskbar = true;
this.Show();
}
//---
private void Enter_Console_Code()
{
string line = string.Empty;
while ((line = Console.ReadLine()) != "q")
Console.WriteLine(line); //pointless code ftw!
}
本质上,这段代码所做的是执行您的“GUI”验证步骤,然后如果成功,它会尝试为应用程序分配一个控制台。分配控制台后,它通过完全隐藏 GUI 并仅显示新控制台(关闭控制台顺便关闭应用程序)进入“控制台模式”。执行“控制台模式”代码,然后关闭控制台并返回 GUI。
于 2012-06-08T16:37:59.673 回答