当前位置: 首页 > wzjs >正文

建设网站需要花多少钱网站开发教程

建设网站需要花多少钱,网站开发教程,手机网站费用,河北石家庄是几线城市1. 在窗体上添加一个 ProgressBar 控件 在您的窗体中添加一个 ProgressBar 控件,并设置其属性为 Marquee 或 Continuous。这个控件用来展示连接测试的进度。 2. 初始化 BackgroundWorker 在窗体的构造函数中,初始化并配置 BackgroundWorker。假设您的…
1. 在窗体上添加一个 ProgressBar 控件

在您的窗体中添加一个 ProgressBar 控件,并设置其属性为 Marquee 或 Continuous。这个控件用来展示连接测试的进度。

2. 初始化 BackgroundWorker

在窗体的构造函数中,初始化并配置 BackgroundWorker。假设您的窗体类名为 Form1

BackgroundWorker backgroundWorker;  

public Form1() // 构造函数  
{  
    InitializeComponent()

    // 具体原因看问题点1 
    System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

    // 初始化 BackgroundWorker  
    backgroundWorker = new BackgroundWorker();  
    backgroundWorker.WorkerReportsProgress = true;  
    backgroundWorker.DoWork += BackgroundWorker_DoWork;  
    backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;  
    backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;  
}

3. 开始 BackgroundWorker

在 btnTestLink_Click 方法中启动 BackgroundWorker,并显示进度条:

private void btnTestLink_Click(object sender, EventArgs e)  
{  
    if (!backgroundWorker.IsBusy)  
    {  
        progressBar.Visible = true; // 显示进度条  
        progressBar.Value = 0; // 重置进度条  
        backgroundWorker.RunWorkerAsync(); // 启动异步操作  
    }  
}

4. 执行连接操作和报告进度

在 BackgroundWorker_DoWork 方法中实现您的连接逻辑。当每个项目完成连接测试后,通过 ReportProgress 方法更新进度:

private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)  
{  
    int totalItems = lvDevice.Items.Count;  
    int completedItems = 0;  
    
    foreach (ListViewItem item in lvDevice.Items)  
    {  
        if (item.Checked)  
        {  
            cp.IP = item.SubItems[3].Text;  
            cp.IPPort = Int32.Parse(item.SubItems[4].Text);  
            cp.CommStyle = 1;  
            cp.ClockID = Int32.Parse(item.SubItems[0].Text);  
            bool isConnected = OpenPort(ref cp);  
            
            // 创建一个更新对象  
            var updateInfo = new  
            {  
                Item = item,  
                Success = isConnected  
            };  

            // 报告进度  
            backgroundWorker.ReportProgress(0, updateInfo);  
            
            ClosePort(ref cp);  
            completedItems++;  
            
            // 更新进度条的值  
            backgroundWorker.ReportProgress((completedItems * 100) / totalItems);  
        }  
    }  
}

5. 更新 UI 元素

在 ProgressChanged 方法中根据连接结果更新 UI 控件:

private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)  
{  
    var updateInfo = (dynamic)e.UserState;  
    
    // 更新 ListView 项的状态  
    if (updateInfo.Success)  
    {  
        updateInfo.Item.BackColor = Color.GreenYellow; // 成功则设置为绿色  
        updateInfo.Item.SubItems[5].Text = "连接成功"; // 显示连接状态  
        updateInfo.Item.ForeColor = Color.Black; // 设置文本颜色为黑色  
        updateInfo.Item.SubItems[5].ForeColor = Color.Green; // 状态文本颜色为绿色  
    }  
    else  
    {  
        updateInfo.Item.BackColor = Color.Red; // 失败则设置为红色  
        updateInfo.Item.SubItems[5].Text = "连接失败"; // 显示连接状态  
        updateInfo.Item.ForeColor = Color.Black; // 设置文本颜色为黑色  
        updateInfo.Item.SubItems[5].ForeColor = Color.Red; // 状态文本颜色为红色  
    }  
}

6. 处理完成操作

在 RunWorkerCompleted 方法中隐藏进度条,并提示用户所有操作已完成:private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)  
{  
    progressBar.Visible = false; // 隐藏进度条  
    MessageBox.Show("所有连接测试完成!");  
}

问题点:

1.System.InvalidOperationException:“线程间操作无效: 从不是创建控件“lvDevice”的线程访问它

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

目的

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls 是一个属性,设置为 false 后,允许从非创建控件的线程访问和修改控件。然而,尽管这样做可以消除异常,但这并不是一个好的做法,原因如下:

  1. 不安全性:直接从其他线程访问 UI 控件可能引发线程间竞争条件,导致应用程序崩溃或 UI 状态出错。
  2. 不推荐的做法:这种做法破坏了 Windows Forms 本身的线程模型,可能会导致难以调试的错误。
  3. 可维护性差:其他开发人员在看到此设置时,可能不明白代码为什么会这样处理,增加了理解和维护的复杂性。

正确的做法

正确的方式是使用 Control.Invoke 或 Control.BeginInvoke 方法将 UI 更新的代码封装进一个委托,并在主线程上执行。这样做不仅安全而且符合线程模型。

http://www.dtcms.com/wzjs/405810.html

相关文章:

  • 盐城做网站哪家最好如何让网站快速收录
  • 国外购物平台排行榜前十名广州seo推广
  • 优化网站作用口碑营销的案例有哪些
  • 公司网站后台怎么上传视频西安搜建站科技网站
  • 怎么在虚拟空间做两个网站淘宝关键词搜索
  • 重钢建设公司官方网站大数据营销软件
  • 网站建设ppt课件广州seo外包
  • 一个专门做字画的网站中国营销网官网
  • 网站建设公司主营业务建站推广网站
  • 唐山网站建设制作b站好看的纪录片免费
  • 网站语言有几种找客户资源的软件
  • 0基础如何做网站最新热搜新闻事件
  • 代理网游要多少钱广东seo推广方案
  • 英德网络推广优化技术
  • 定制型网站制作明细报价表站长统计app软件下载2021
  • 网站皮肤样板一个品牌的策划方案
  • 做网站前怎么建立数据结构网站推广方案策划书2000
  • 更换网站首页模板怎么做整合营销的最高阶段是
  • 苏州公司排名深圳搜索引擎优化推广
  • 已有网站可以做服务器吗站长工具友链检测
  • 在深圳如何注册自己的公司网站怎么优化关键词排名
  • 梧州网站制作临沂网站建设优化
  • wordpress转https杭州seo中心
  • 创建网站代码网站域名费一年多少钱
  • 泉州网站建设报价seo排名培训公司
  • 有什么网站可以做设计兼职最近三天的国际新闻大事
  • 小企业网站建设多少钱营销方案设计思路
  • 旅游网站建设内容企业推广软文
  • 广东的网站建设案例百度浏览器下载安装2023版本
  • 公司网站创建seo有哪些网站