winforms Microsoft.NET. SDK.Web中的通知图标

ttygqcqt  于 2022-12-27  发布在  .NET
关注(0)|答案(1)|浏览(205)

我有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应用程序

yebdmbv4

yebdmbv41#

为什么???
UI元素需要一个消息循环来处理它们的事件。您的代码启动了一个网站,但没有UI处理循环。
至少,您需要添加一个消息循环,例如Application.Run。大概是在您启动(而不是运行)Web应用程序之后(或者,在不同的线程中运行Web应用程序)。
您可能还需要从消息循环中创建UI元素,以便它们可以“看到”正确的UI上下文。
此外,考虑如何关闭将工作;消息循环为您的应用提供了操作系统请求关闭的方法,因此理想情况下,您应该为响应来自UI的关闭请求的Web部件编写一个生存期组件。

相关问题