在桌面应用程序中包含OWIN

时间:2014-12-04 15:51:11

标签: c# owin

我已经编写了一款可以作为控制台应用程序运行良好的OWIN应用程序,但我想将其作为我写作的桌面应用程序的一部分。我可以找到启动OWIN应用程序的每个示例都将其作为控制台ap启动并运行直到按下某个键,如何将其移动到桌面应用程序中?

我正在考虑将启动代码放入一个线程中,并在无限循环中将其设置为关闭,这是最好的方法还是有替代方法?

目前我已经得到了这个:

class Program
{
    static void Main(string[] args)
    {
        using (Microsoft.Owin.Hosting.WebApp.Start<Startup1>("http://localhost:9000"))
        {
            Console.WriteLine("Press [enter] to quit...");
            Console.ReadLine();
        }
    }
}

这启动了作为控制台应用程序运行的OWIN服务器,但我希望能够将其包含在桌面应用程序中,并通过按下按钮来启动和停止它。我该如何重写这个呢?

1 个答案:

答案 0 :(得分:1)

当您调用WebApp.Start(“some_addreess”)时,它会自动在后台线程中启动,您无需在线程中对其进行管理。只是保留了在退出或停止前需要关闭的一次性物品的参考。

示例代码可能如下所示

public partial class Form1 : Form
    {
        private IDisposable server;

        public Form1()
        {
            InitializeComponent();
            InitializeOwin();
        }

        private void InitializeOwin()
        {
            server = WebApp.Start<OwinStartup>("http://localhost:8989/");
        }

        /// <summary>
        /// To be called before quit or stop button
        /// </summary>
        private void CallMeBeforeClose()
        {
            server.Dispose();
        }
    }

    public class OwinStartup
    {
        //initialize owin startup class and do other stuff
        public void Configuration(IAppBuilder appBuilder)
        {
            appBuilder.UseWelcomePage("/");
        }
    }