我有WASM应用程序请求API到localhost管理文件和文件夹...除此之外,我有另一个处理WASM请求的Web应用程序...
现在我想添加notifyIcon到localhost web应用程序,这样用户就可以看到它的配置和端口使用情况...
这是web应用程序的项目文件
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<OutputType>WinExe</OutputType>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<ItemGroup>
<None Update="briefcase-solid.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
这是网络应用程序的program.cs
var builder = WebApplication.CreateBuilder(args);
int port = builder.Configuration.GetValue<int>("Port");
NotifyIcon notifyIcon = new NotifyIcon();
notifyIcon.Visible = true;
notifyIcon.Icon = new Icon("briefcase-solid.ico");
notifyIcon.ShowBalloonTip(5000, "Port", port.ToString(), ToolTipIcon.Info);
StringBuilder sb = new StringBuilder();
sb.AppendLine("localHost Service");
sb.AppendLine("Port : " + port);
notifyIcon.Text = sb.ToString();
notifyIcon.Click += (o, e) =>
{
// not execute At all
};
builder.Services.AddControllers();
var app = builder.Build();
string url = "http://localhost:" + port;
app.UseCors(x => x.AllowAnyOrigin());
app.UseLocalAccessOnlyMiddleware();
app.MapControllers();
app.MapGet("/", () => "Hello World!");
await app.RunAsync(url);
现在notifyIcon显示气球提示和文本显示确定...但我不能使用事件回叫o点击它等等...为什么?
notifyIcon.Click
不起作用,因为这是Web应用程序而不是win应用程序
1条答案
按热度按时间yebdmbv41#
为什么???
UI元素需要一个消息循环来处理它们的事件。您的代码启动了一个网站,但没有UI处理循环。
至少,您需要添加一个消息循环,例如
Application.Run
。大概是在您启动(而不是运行)Web应用程序之后(或者,在不同的线程中运行Web应用程序)。您可能还需要从消息循环中创建UI元素,以便它们可以“看到”正确的UI上下文。
此外,考虑如何关闭将工作;消息循环为您的应用提供了操作系统请求关闭的方法,因此理想情况下,您应该为响应来自UI的关闭请求的Web部件编写一个生存期组件。