模块化html代码
HTML 页面模块化实现方案
将 HTML 页面进行模块化是前端开发中的常见需求,它可以提高代码的可维护性和复用性。针对你提供的这个建筑辅助设计工具集合页面,我们可以采用多种模块化方案,下面我将介绍几种常见的实现方式。
方案一:使用服务器端模板引擎
这是最直接的模块化方式,通过服务器端语言将页面拆分为不同的模板文件,在服务器端进行组装后再返回给浏览器。以下是使用 Node.js 和 Express 框架实现的示例:
项目结构
project/
├── public/
│ ├── css/
│ │ └── styles.css
│ ├── js/
│ │ ├── particles.js
│ │ └── main.js
│ └── img/
├── views/
│ ├── layouts/
│ │ └── default.ejs # 主布局模板
│ ├── partials/
│ │ ├── head.ejs # 头部模板
│ │ ├── navbar.ejs # 导航栏模板
│ │ ├── footer.ejs # 页脚模板
│ │ └── particleCanvas.ejs # 粒子画布模板
│ └── index.ejs # 首页模板
├── app.js # Express应用
└── package.json
模板文件实现
- head.ejs (头部模板)
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title><%= title %></title>
<!-- 使用国内CDN源 -->
<link href="/static/bootstrap.min.css" rel="stylesheet">
<link href="/css/styles.css" rel="stylesheet">
</head>
- navbar.ejs (导航栏模板)
<nav class="navbar navbar-expand-lg navbar-light">
<a class="navbar-brand" href="http://172.16.1.8:8088/">【华科设计】建筑辅助设计相关工具集合</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav ml-auto">
<li class="nav-item active">
<a class="nav-link" href="http://172.16.1.8:8088/">首页</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="http://172.16.1.3:8888/" target="_blank">企业内网</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="http://172.16.1.8:8088/drupal/node/2" target="_blank">关于我们</a>
</li>
</ul>
</div>
</nav>
- particleCanvas.ejs (粒子画布模板)
<canvas id="particle-container"></canvas>
- footer.ejs (页脚模板)
<footer class="footer">
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<center>
浏览量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner fa-spin"></i></span>
</center>
copyright by 华科设计--高治中
</footer>
- default.ejs (主布局模板)
<!DOCTYPE html>
<html lang="zh-CN">
<% include partials/head %>
<body>
<% include partials/navbar %>
<% include partials/particleCanvas %>
<div class="main-content">
<div class="container mt-3">
<%= body %>
</div>
</div>
<% include partials/footer %>
<script src="/static/jquery.slim.min.js"></script>
<script src="/static/popper.min.js"></script>
<script src="/static/bootstrap.min.js"></script>
<script src="/js/particles.js"></script>
<script src="/js/main.js"></script>
</body>
</html>
- index.ejs (首页内容模板)
<h1 class="text-center page-title">你好,我是建筑辅助设计的AI助手</h1>
<p class="text-center page-subtitle">有关建筑、规范、软件使用等任何问题都可以问我哦~</p>
<div class="card-columns">
<div class="card">
<div class="card-body">
<h5 class="card-title"><a href="http://172.16.1.8:8088/chat.html" target="_blank">查规范</a></h5>
<p class="card-text">通过知识库AI训练,查询各专业相关规范</p>
</div>
</div>
<!-- 其他卡片内容... -->
</div>
- app.js (Express 应用)
const express = require('express');
const path = require('path');
const app = express();
// 配置视图引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// 静态文件服务
app.use(express.static(path.join(__dirname, 'public')));
// 首页路由
app.get('/', (req, res) => {
res.render('index', {
title: '【华科设计】建筑辅助设计相关工具集合'
});
});
// 启动服务器
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`服务器运行在 http://localhost:${port}`);
});
方案二:使用客户端模板引擎
如果不想使用服务器端技术,也可以在客户端使用模板引擎来实现模块化,以下是使用 Handlebars.js 的示例:
HTML 结构
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>【华科设计】建筑辅助设计相关工具集合</title>
<!-- 使用国内CDN源 -->
<link href="/static/bootstrap.min.css" rel="stylesheet">
<link href="styles.css" rel="stylesheet">
</head>
<body>
<!-- 模板将在这里渲染 -->
<div id="app"></div>
<!-- 模板定义 -->
<script id="navbar-template" type="text/x-handlebars-template">
<!-- 导航栏HTML代码 -->
</script>
<script id="footer-template" type="text/x-handlebars-template">
<!-- 页脚HTML代码 -->
</script>
<script id="main-content-template" type="text/x-handlebars-template">
<!-- 主要内容HTML代码 -->
</script>
<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
<script src="app.js"></script>
</body>
</html>
JavaScript 实现 (app.js)
// 注册模板
Handlebars.registerTemplate('navbar', document.getElementById('navbar-template').innerHTML);
Handlebars.registerTemplate('footer', document.getElementById('footer-template').innerHTML);
Handlebars.registerTemplate('mainContent', document.getElementById('main-content-template').innerHTML);
// 页面数据
const pageData = {
title: '【华科设计】建筑辅助设计相关工具集合',
tools: [
{
title: '查规范',
href: 'http://172.16.1.8:8088/chat.html',
description: '通过知识库AI训练,查询各专业相关规范'
},
// 其他工具数据...
]
};
// 渲染页面
function renderPage() {
const navbarHTML = Handlebars.compile(Handlebars.templates.navbar)(pageData);
const footerHTML = Handlebars.compile(Handlebars.templates.footer)();
const mainContentHTML = Handlebars.compile(Handlebars.templates.mainContent)({ tools: pageData.tools });
document.getElementById('app').innerHTML = `
${navbarHTML}
<canvas id="particle-container"></canvas>
<div class="main-content">
<div class="container mt-3">
${mainContentHTML}
</div>
</div>
${footerHTML}
`;
// 初始化粒子效果
initParticles();
}
// 粒子效果初始化
function initParticles() {
// 粒子代码...
}
// 页面加载完成后渲染
document.addEventListener('DOMContentLoaded', renderPage);
方案三:使用 ES6 模块和 Web Components
对于更现代化的前端项目,可以使用 ES6 模块和 Web Components 来实现组件化:
项目结构
project/
├── public/
│ ├── css/
│ │ └── styles.css
│ ├── js/
│ │ ├── components/
│ │ │ ├── Navbar.js # 导航栏组件
│ │ │ ├── Footer.js # 页脚组件
│ │ │ ├── ToolCard.js # 工具卡片组件
│ │ │ └── ParticleCanvas.js # 粒子画布组件
│ │ └── main.js # 主应用
│ └── img/
└── index.html # 入口HTML
组件实现示例
- Navbar.js (导航栏组件)
class Navbar extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
this.render();
}
render() {
this.shadowRoot.innerHTML = `
<style>
/* 导航栏样式 */
.navbar {
background-color: white;
padding: 10px 15px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
z-index: 1000;
}
/* 其他样式... */
</style>
<nav class="navbar navbar-expand-lg navbar-light">
<a class="navbar-brand" href="http://172.16.1.8:8088/">【华科设计】建筑辅助设计相关工具集合</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav ml-auto">
<li class="nav-item active">
<a class="nav-link" href="http://172.16.1.8:8088/">首页</a>
</li>
<!-- 其他导航项... -->
</ul>
</div>
</nav>
`;
}
}
customElements.define('nav-bar', Navbar);
- main.js (主应用)
import './components/Navbar.js';
import './components/Footer.js';
import './components/ParticleCanvas.js';
import './components/ToolCard.js';
document.addEventListener('DOMContentLoaded', () => {
const app = document.getElementById('app');
// 添加导航栏组件
const navbar = document.createElement('nav-bar');
app.appendChild(navbar);
// 添加粒子画布组件
const particleCanvas = document.createElement('particle-canvas');
app.appendChild(particleCanvas);
// 添加主要内容
const mainContent = document.createElement('div');
mainContent.className = 'main-content';
mainContent.innerHTML = `
<div class="container mt-3">
<h1 class="text-center page-title">你好,我是建筑辅助设计的AI助手</h1>
<p class="text-center page-subtitle">有关建筑、规范、软件使用等任何问题都可以问我哦~</p>
<div class="card-columns">
${createToolCards()}
</div>
</div>
`;
app.appendChild(mainContent);
// 添加页脚组件
const footer = document.createElement('page-footer');
app.appendChild(footer);
});
function createToolCards() {
const tools = [
{ title: '查规范', href: 'http://172.16.1.8:8088/chat.html', description: '通过知识库AI训练,查询各专业相关规范' },
// 其他工具...
];
return tools.map(tool => `
<tool-card title="${tool.title}" href="${tool.href}" description="${tool.description}"></tool-card>
`).join('');
}
选择合适的模块化方案
三种方案各有优缺点,你可以根据项目需求选择:
- 服务器端模板引擎:
- 优点:SEO 友好,减轻客户端负担,适合需要后端支持的项目
- 适合场景:企业内部系统、需要与数据库交互的应用
- 客户端模板引擎:
- 优点:纯前端实现,不需要服务器端支持
- 适合场景:小型项目、原型开发
- ES6 模块和 Web Components:
- 优点:最现代化的组件化方案,符合 Web 标准,便于维护和扩展
- 适合场景:大型前端项目、需要高度可复用组件的应用
无论选择哪种方案,模块化的核心思想都是将页面拆分为独立可复用的组件,每个组件负责自己的逻辑和样式,从而提高代码的可维护性和开发效率。
SSI 配置问题排查
当按照上述步骤配置后无法显示内容,通常是由于 SSI 配置不正确或未完全生效导致的。下面我将提供详细的排查步骤和解决方案:
一、检查 XAMPP 配置
1. 确认 mod_include 模块已启用
打开httpd.conf文件,确保以下行没有被注释(即没有#前缀):
LoadModule include_module modules/mod_include.so
2. 确认 Directory 选项配置正确
找到并修改 htdocs 目录配置,确保包含Includes选项:
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes
AllowOverride All
Require all granted
</Directory>
3. 确认 SSI 文件扩展名配置
确保添加了以下配置(如果没有则添加):
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
4. 重启 Apache 服务器
修改配置文件后,必须重启 Apache 服务器使更改生效。
二、检查文件结构和权限
1. 确认文件路径和命名
确保文件结构如下:
htdocs/
├── includes/
│ ├── head.html
│ ├── navbar.html
│ ├── footer.html
│ └── particleCanvas.html
├── css/
│ └── styles.css
├── js/
│ └── particles.js
└── index.shtml
2. 确认文件权限
确保所有文件都有读取权限,特别是在 Linux 或 macOS 环境下。
三、调试方法
1. 创建测试文件
创建一个简单的测试文件test.shtml:
<!DOCTYPE html>
<html>
<body>
<h1>SSI测试</h1>
当前时间:<!--#echo var="DATE_LOCAL" -->
</body>
</html>
如果这个文件能够显示当前时间,则表示 SSI 配置正常。
2. 检查 Apache 错误日志
查看 XAMPP 的 Apache 错误日志文件xampp/apache/logs/error.log,查找与 SSI 相关的错误信息。
常见错误包括:
[includes:error] [pid ...] [client ...] AH01240: failed to open...- 表示包含文件路径错误[includes:error] [pid ...] [client ...] mod_include: Options +Includes not enabled- 表示 Directory 选项配置错误
3. 使用浏览器开发者工具
在浏览器中打开开发者工具(F12 或右键检查),查看 Network 面板:
- 检查 index.shtml 的响应内容
- 检查是否有 404 或 500 错误
- 查看控制台是否有 JavaScript 错误
四、替代解决方案
如果上述方法仍然无法解决问题,可以考虑使用以下替代方案:
1. 使用 PHP include 语句
虽然你希望避免使用 PHP,但这是最简单的解决方案:
<!DOCTYPE html>
<html lang="zh-CN">
<?php include 'includes/head.html'; ?>
<body>
<?php include 'includes/navbar.html'; ?>
<?php include 'includes/particleCanvas.html'; ?>
<div class="main-content">
<!-- 页面内容 -->
</div>
<?php include 'includes/footer.html'; ?>
<script src="https://cdn.staticfile.org/jquery/3.5.1/jquery.slim.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
<script src="/js/particles.js"></script>
</body>
</html>
将文件扩展名改为.php,并确保 XAMPP 的 PHP 模块已启用。
2. 使用 JavaScript 动态加载
如果不想使用服务器端技术,可以使用 JavaScript 动态加载:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>【华科设计】建筑辅助设计相关工具集合</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/4.6.0/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div id="navbar-container"></div>
<div class="main-content">
<!-- 页面内容 -->
</div>
<div id="footer-container"></div>
<script>
// 加载导航栏
fetch('includes/navbar.html')
.then(response => response.text())
.then(data => {
document.getElementById('navbar-container').innerHTML = data;
});
// 加载页脚
fetch('includes/footer.html')
.then(response => response.text())
.then(data => {
document.getElementById('footer-container').innerHTML = data;
});
</script>
</body>
</html>
五、最终建议
- 首先尝试创建测试文件
test.shtml,确认 SSI 是否正常工作 - 如果测试文件无法显示当前时间,请仔细检查 Apache 配置和错误日志
- 如果测试文件正常但主页面仍无法显示,请检查包含文件的路径和内容
- 如果仍然无法解决,考虑使用 PHP include 作为替代方案,这是最可靠的方法
通过以上步骤,应该能够找出问题所在并解决 SSI 无法正常工作的问题。
SSI 测试失败的深度排查
当 SSI 测试页面无法显示时间,且错误日志中没有相关记录时,说明 SSI 功能可能未正确启用。下面我将提供更详细的排查步骤和解决方案:
一、重新检查 Apache 配置
1. 确认 mod_include 模块加载
在httpd.conf中找到以下行,确保没有被注释:
LoadModule include_module modules/mod_include.so
2. 启用 SSI 的正确方式
修改 Directory 配置,确保包含Options +Includes:
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks +Includes
AllowOverride All
Require all granted
</Directory>
3. 配置 AddType 和 AddOutputFilter
确保以下配置存在
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
4. 检查是否有其他配置覆盖
搜索整个httpd.conf文件,确保没有其他地方的配置覆盖了上述设置。
二、启用详细日志记录
在httpd.conf中添加以下行,启用更详细的 SSI 日志记录:
LogLevel includes:trace3
重启 Apache 后,再次测试 SSI 页面,然后检查error.log文件,应该能看到更详细的 SSI 处理信息。
三、检查文件权限和路径
1. 文件权限
确保所有相关文件都有可读权限:
htdocs/
├── includes/
│ ├── head.html
│ ├── navbar.html
│ ├── footer.html
│ └── particleCanvas.html
├── test.shtml
└── index.shtml
2. 测试文件路径
创建一个简单的测试文件结构:
<!-- test.shtml -->
<!DOCTYPE html>
<html>
<body>
<h1>SSI测试</h1>
当前时间:<!--#echo var="DATE_LOCAL" -->
包含测试:<!--#include virtual="includes/navbar.html" -->
</body>
</html>
确保includes/navbar.html存在且内容正确。
四、验证服务器响应
使用浏览器开发者工具或 curl 检查服务器响应:
curl -v http://localhost/test.shtml
查看响应头和内容,确认:
- 响应状态码是否为 200
- 响应内容是否包含 SSI 指令(如果包含,说明 SSI 未被处理)
- 响应头中是否有
X-Powered-By: PHP/...(如果有,可能 PHP 配置有冲突)
五、临时修改配置测试
1. 临时修改 Directory 配置
尝试将 Directory 配置修改为最宽松的设置:
<Directory "C:/xampp/htdocs">
Options All
AllowOverride All
Require all granted
</Directory>
重启 Apache 后测试,这将启用所有服务器功能,帮助确认是否是某个选项被禁用导致的问题。
2. 临时修改文件扩展名
尝试将测试文件改为.html扩展名,并修改配置:
AddType text/html .html
AddOutputFilter INCLUDES .html
重启 Apache 后测试test.html,确认是否是扩展名配置问题。
六、替代解决方案
如果上述方法仍然无法解决问题,建议使用 PHP include 替代 SSI:
1. 创建测试 PHP 文件
<!-- test.php -->
<!DOCTYPE html>
<html>
<body>
<h1>PHP测试</h1>
当前时间:<?php echo date('Y-m-d H:i:s'); ?>
包含测试:<?php include 'includes/navbar.html'; ?>
</body>
</html>
2. 确认 PHP 工作正常
确保 XAMPP 的 PHP 模块已启用,访问http://localhost/test.php,如果能正常显示时间和包含内容,则说明 PHP 工作正常。
3. 转换项目到 PHP
将所有.shtml文件改为.php,并将 SSI 指令替换为 PHP include:
<?php include 'includes/head.html'; ?>
七、最终建议
- 如果 SSI 仍然无法工作,建议使用 PHP include 作为替代方案,这是最可靠的方法
- 如果需要坚持使用 SSI,建议重新安装 XAMPP,确保在安装过程中选择了所有组件
- 考虑使用其他 Web 服务器(如 Nginx+FastCGI),虽然配置更复杂,但可能避免 XAMPP 的一些配置问题
通过以上步骤,应该能够找出 SSI 无法正常工作的原因并解决问题。
模块化html代码的更多相关文章
- formidable 模块化开发 代码拆分(解耦) nodejs图片服务器架构
引言:程序要做到:健壮性.低耦合.可扩展.方便程序员分工合作 上传图片值nodejs服务器并显示图片的源代码: post.html : <!DOCTYPE html> <html l ...
- entfrm开源免费模块化无代码开发平台,开放生态为您创造更多的价值
entfrm开发平台6大特性,赋能快速开发,为您创造更多的价值: 1. 模块化 丰富的模块稳定的框架 后台极易上手 目前已包括系统管理.任务调度.运维监控.开发工具.消息系统.工作流引擎.内容管理等模 ...
- entfrm-boot开发平台一览【entfrm开源模块化无代码开发平台】
介绍 entfrm-boot是一个以模块化为核心的无代码开发平台,能够让中小企业快速从零搭建自己的开发平台:开箱即用,可插拔可自由组合:以模块化的方式,最大化的代码复用,避免重复开发:无代码可视化开发 ...
- [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现
// 还存在有问题的代码,问题在于processFile()中// 问题:在ipone 5c 下,某些图片压缩处理后,上传到服务器生成的文件size为0,即是空白 ;define(['mod/tool ...
- entfrm-boot开发平台功能介绍【entfrm开源模块化无代码开发平台】
简介 entfrm开发平台,是一个以模块化为核心的无代码开发平台,是一个集PC和APP快速开发.系统管理.运维监控.开发工具.OAuth2授权.可视化数据源管理与数据构建.API动态生成与统计.工作流 ...
- 模块化Javascript代码的两种方式
1.将模块整体放在函数里 function buildMonthNameModule() { var names = ["January ", "February&quo ...
- js模块化历程
这是一篇关于js模块化历程的长长的流水账,记录js模块化思想的诞生与变迁,展望ES6模块化标准的未来.经历过这段历史的人或许会感到沧桑,没经历过的人也应该知道这段历史. 无模块时代 在ajax还未提出 ...
- 模块化利器: 一篇文章掌握RequireJS常用知识
通过本文,你可以对模块化开发和AMD规范有一个较直观的认识,并详细地学习RequireJS这个模块化开发工具的常见用法.本文采取循序渐进的方式,从理论到实践,从RequireJS官方API文档中,总结 ...
- js 模块化历程
作者:吕大豹 网址:http://www.cnblogs.com/lvdabao/p/js-modules-develop.html 这是一篇关于js模块化历程的长长的流水账,记录js模块化思想的诞生 ...
- javascript模块化应用
这是一篇关于js模块化历程的长长的流水账,记录js模块化思想的诞生与变迁,展望ES6模块化标准的未来.经历过这段历史的人或许会感到沧桑,没经历过的人也应该知道这段历史. 无模块时代 在ajax还未提出 ...
随机推荐
- sonarqube+gitlab+jenkins+maven集成搭建 (五)
Jenkins与SonarQube Jenkins 配置 SonarQube在 SonarQube 中生成 Server authentication token登录 SonarQube 后,在 &q ...
- 2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了!
2K star!三分钟搭建企业级后台系统,这款开源Java框架绝了! "LikeAdmin Java是基于Spring Boot + Mybatis Plus + Vue 3的快速开发平台, ...
- 最强AI数字人,口型、表情、动作全同步!Kairos下载介绍
在数字化浪潮汹涌澎湃的今天,视频合成技术如同一颗璀璨的明星,照亮了内容创作的广阔天地 Kairos是一款顶级数字人制作工具,它基于先进的 AI 算法,能够快速克隆出用户的数字分身,并且精准匹配外貌.声 ...
- 通用的servlet
1 通用的servlet实现的原理 2 实例 2.1 目录结构 2.2 BaseServlet.java 2.3 ServletDemo.java 2.4 index.html 2.5 test.ht ...
- GDB调试Core文件出现问号?的原因
函数的调用其实是函数的入栈出栈操作,但当程序栈因程序的错误导致破坏了栈,这时候就会导致gdb解析core文件时解析不出来的情况,即是问号(?) 那还能做点什么呢? 可以通过打印\(rbp\)和\(rs ...
- 结合pandas,sqlite3批量将csv数据导入sqlite数据库
import sqlite3 import pandas as pd conn=sqlite3.connect(r'demo.db') c=conn.cursor() 创建新表 c.execute(& ...
- 会用 AI 的工程师,效率已经拉开差距了 - “ 我们曾经引以为傲的编码能力,正在被改写。”
最近尝试用Cursor做了几个内部业务系统,发现一个越来越明显的趋势 真正会用 AI 的工程师,效率已经拉开差距了. 做了十几年 Java, 这波 AI 编程浪潮来得快,一开始我也没太当回事,以为这波 ...
- 航空货运系统总结性Blog
前言 本次题目集以航空运送货物为背景,设计航空货物管理系统,主要考察对类设计的把握是否合理还有对继承和多态的使用,能否设计出符合标准的类,是否充分理解对面向对象六大设计原则(SRP,OCP,LSP,D ...
- WPF 的 await Application.Current.Dispatcher.InvokeAsync,Func 如果是Task , 等待赋值可能存在没有等待执行完成的问题
最近在检查我们组内的代码,发现好多用到 await Application.Current.Dispatcher.InvokeAsync 相信好多WPF的开发都会用到 该方法做UI线程切换.但是细看里 ...
- 聊一聊 .NET Dump 中的 Linux信号机制
一:背景 1. 讲故事 当 .NET程序 在Linux上崩溃时,我们可以配置一些参考拿到对应程序的core文件,拿到core文件后用windbg打开,往往会看到这样的一句信息 Signal SIGAB ...