我有一个C#Windows窗体应用程序,它由窗体和用户控件组成。
我尝试在添加到表单的用户控件内的后台线程中运行代码,以下是我在用户控件内使用的代码:
private void button3_Click(object sender, EventArgs e)
{
ShowNotification("Invoke", $"Start Invoke { DateTime.Now}");
Task.Run(() =>
{
ShowNotification("Run", $"Start Run { DateTime.Now}");
});
}
private void ShowNotification(string title, string message, ToolTipIcon icon = ToolTipIcon.Info)
{
notifyIcon1.ShowBalloonTip(20, title, message, icon);
}
在发布模式下运行此项目时,执行没有问题。但是,在调试模式下运行此项目时,任务中的代码将被删除。按下按钮1.5分钟后执行Run,这意味着在第一次通知1.5分钟后显示第二次通知。
有人知道为什么会这样吗?
编辑:
在对这个问题进行了更多搜索之后,我发现了这个问题,它有助于解决这个问题:
Why can't I start a thread within a user control constructor?
替换:
Task.Run(() =>
{
ShowNotification("Run", $"Start Run { DateTime.Now}");
});
与:
var notificationThread =
new Thread(() =>
{
ShowNotification("Run", $"Start Run {DateTime.Now}");
})
{ IsBackground = true};
notificationThread.Start();
我们已经解决了这个问题。