随笔 - 317, 文章 - 0, 评论 - 453, 阅读 - 114万
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

C# 线程安全的操作控件

Posted on   PHP-张工  阅读(230)  评论(0编辑  收藏  举报

当子线程操作主线程(UI线程)的控件时,可能会造成阻塞或冲突;使用委托就可以避免。

复制代码
public FrmTelnet()
{
    Control.CheckForIllegalCrossThreadCalls = false;
    InitializeComponent();
}

// 线程安全输出
public delegate void showInfoDelegate(string str);
private void showInfo(string str)
{
    if (txtInfo.InvokeRequired)
    {
        showInfoDelegate la = new showInfoDelegate(showInfo);
        txtInfo.Invoke(la, str);
        return;
    }

    if (txtInfo.TextLength > 100000)
    {
        txtInfo.Text = "";
    }
    txtInfo.AppendText(str.Trim() + System.Environment.NewLine);
}
复制代码

 简单事件触发备忘

复制代码
// 消息事件
public delegate void EventInfo(object sender, string info);
public event EventInfo OnEventInfo;

// 触发消息
private void showInfo(string str)
{
    OnEventInfo(this, str);
}

///////// 调用
HttpServer httpServer = new HttpServer();
httpServer.OnEventInfo += eventInfo;

private void eventInfo(object sender, string info)
{
    // 处理
}
复制代码

 快捷线程创建备忘

复制代码
Thread ThreadListener = new Thread(() =>
{
    while (true)
    {
        try
        {
        }
        catch
        { }
    }
});
ThreadListener.IsBackground = true;
ThreadListener.Start();
复制代码

 

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
历史上的今天:
2011-03-09 JS 操作cookie
点击右上角即可分享
微信分享提示