/// <summary> /// 启动应用程序 /// </summary> private async Task LaunchApplication() => await Task.WhenAll( Task.Delay(1000), Task.Factory.StartNew(() => { this.UpdateProgressAsync("开始初始化 AutoMap ..."); this.InitAutoMap(); this.UpdateProgressAsync("开始注册服务到依赖注入容器 ..."); DIContainerHelper.RegistServicesFromConfig(); this.UpdateProgressAsync("创建主窗口 ..."); MainForm mainForm = (MainForm)this.Invoke(new Func <MainForm>(() => new MainForm())); DIContainerHelper.RegisteInstanceAsType <MainForm, MainForm>(mainForm); foreach (var message in mainForm.Initialize()) { this.UpdateProgressAsync(message); } this.UpdateProgressAsync("注册自选股票窗口 ..."); this.RegisterSingleToolDockFormInstance <SelfSelectStockForm>(mainForm); this.UpdateProgressAsync("注册热门股票窗口 ..."); this.RegisterSingleToolDockFormInstance <HotStockDockForm>(mainForm); this.UpdateProgressAsync("注册搜索股票窗口 ..."); this.RegisterSingleToolDockFormInstance <SearchStockDockForm>(mainForm); this.UpdateProgressAsync("注册图表文档窗口 ..."); this.RegisterDocumentDockForm <ChartDocumentForm>(); this.UpdateProgressAsync("注册最近行情窗口 ..."); this.RegisterDocumentDockForm <RecentQuotaDocumentForm>(); this.UpdateProgressAsync("注册行情仓库窗口 ..."); this.RegisterDocumentDockForm <QuotaRepositoryDocumentForm>(); this.UpdateProgressAsync("注册实时行情窗口 ..."); this.RegisterSingleToolDockFormInstance <CurrentQuotaForm>(mainForm); this.UpdateProgressAsync("注册大盘指数窗口 ..."); this.RegisterSingleToolDockFormInstance <MarketQuotaForm>(mainForm); this.UpdateProgressAsync("注册公司信息窗口 ..."); this.RegisterSingleToolDockFormInstance <CompanyInfoForm>(mainForm); this.UpdateProgressAsync("注册最近交易窗口 ..."); this.RegisterSingleToolDockFormInstance <RecentTradeForm>(mainForm); this.UpdateProgressAsync($"密封服务容器 ..."); DIContainerHelper.Build(); this.UpdateProgressAsync($"绑定 MQ 发布者 ..."); MQHelper.BindPublisher(); }));
public void MQHelperUnitTests() { int counter = 0; Console.WriteLine("绑定发布者 ..."); MQHelper.BindPublisher(); Console.WriteLine("订阅主题 ..."); var handler = MQHelper.Subscribe("测试订阅者", new[] { "1" }, (source, topic, message) => { counter++; Console.WriteLine($"收到 {source} 发来的消息:{topic} - {message}"); }); // 发布者和订阅者任何一端断开或重连,另一端不需要任何操作,可以继续收发 MQHelper.Publish("测试发布者", "1.1", "股票打新咯!!!-1"); MQHelper.DisconnectPublisher(); Thread.Sleep(100); MQHelper.Publish("测试发布者", "1.2", "股票打新咯!!!-2"); Thread.Sleep(100); MQHelper.BindPublisher(); Thread.Sleep(100); MQHelper.Publish("测试发布者", "1.3", "股票打新咯!!!-3"); Thread.Sleep(100); handler.Disconnect(); Thread.Sleep(100); MQHelper.Publish("测试发布者", "1.4", "股票打新咯!!!-4"); Thread.Sleep(100); Thread.Sleep(100); handler.Connect(); Thread.Sleep(100); MQHelper.Publish("测试发布者", "1.5", "股票打新咯!!!-5"); // 自动过滤自己发布的消息,避免消息循环 Thread.Sleep(100); MQHelper.Publish("测试订阅者", "1.6", "股票打新咯!!!-6"); Thread.Sleep(100); // 释放订阅者 handler.Dispose(); Thread.Sleep(100); MQHelper.Publish("测试订阅者", "1.7", "股票打新咯!!!-7"); Console.WriteLine($"测试结束,计数器: {counter}"); // 仅收到 1、3、5 消息即为正常 Assert.AreEqual(3, counter); }