C#委託事件如何更新UI的值

我想在一個委託事件中更新ui值,但是總是報錯,請幫我看看:

System.InvalidOperationException: '跨執行緒作業無效: 存取控制項 'tb_log' 時所使用的執行緒與建立控制項的執行緒不同。'

我的代碼如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MavenInstall
{
    public partial class MavenInstall : Form
    {
        public delegate void OutDelegate(string txt);
        public OutDelegate outDelegate;
        public MavenInstall()
        {
            InitializeComponent();
            tb_packaging.Text = "jar";
            outDelegate = UpdateLog;
            //tb_command.Text = "mvn install:install-file -DgroupId={0} -DartifactId={1} -Dversion={2} -Dpackaging={3} -Dfile={4}";
        }

        private void btn_select_Click(object sender, EventArgs e)
        {
            if (SelectJarFile.ShowDialog() == DialogResult.OK)
            {
                tb_file.Text = SelectJarFile.FileName;
            }
        }

        private void btn_execute_Click(object sender, EventArgs e)
        {
            tb_log.Text = null;
            foreach (Control control in gb_condition.Controls)
            {
                control.Enabled = false;
            }
            String cmd = String.Format(@"mvn install:install-file -DgroupId={0} -DartifactId={1} -Dversion={2} -Dpackaging={3} -Dfile={4}"
                , tb_groupid.Text,tb_artifactid.Text
                ,tb_version.Text,tb_packaging.Text,tb_file.Text);
            tb_command.Text = cmd;
            Process process = new Process();
            process.StartInfo.FileName = "cmd.exe";
            process.StartInfo.UseShellExecute = false;    //是否使用操作系统shell启动
            process.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
            process.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
            process.StartInfo.RedirectStandardError = true;//重定向标准错误输出
            process.StartInfo.CreateNoWindow = true;//不显示程序窗口
            process.Start();//启动程序

            process.OutputDataReceived += new DataReceivedEventHandler(OutputDataHandler);
            process.BeginOutputReadLine();

            process.StandardInput.WriteLine(cmd);
            process.StandardInput.AutoFlush = true;
            process.StandardInput.WriteLine("exit");

            process.WaitForExit();//等待程序执行完退出进程
            foreach (Control control in gb_condition.Controls)
            {
                control.Enabled = true;
            }
            process.Close();
        }

        private void OutputDataHandler(object sender, DataReceivedEventArgs e)
        {
            if (!string.IsNullOrEmpty(e.Data)) {
                //UpdateLog(e.Data);
                outDelegate.Invoke(e.Data);
            }
        }

        private void UpdateLog(string txt)
        {
            //if (tb_log.InvokeRequired)
            //{

            //    tb_log.Invoke(outDelegate, txt);
            //}
            //else 
            //{
            //    this.tb_log.Text += txt + "\r\n";
            //}

            this.tb_log.Text += txt + "\r\n";
        }

        private void btn_clear_Click(object sender, EventArgs e)
        {
            tb_groupid.Text = null;
            tb_artifactid.Text = null;
            tb_version.Text = null;
            tb_packaging.Text = null;
            tb_file.Text = null;
            tb_command.Text = null;
            tb_log.Text = null;
        }
    }
}

design文件

namespace MavenInstall
{
    partial class MavenInstall
    {
        /// <summary>
        /// 設計工具所需的變數。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清除任何使用中的資源。
        /// </summary>
        /// <param name="disposing">如果應該處置受控資源則為 true,否則為 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form 設計工具產生的程式碼

        /// <summary>
        /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改
        /// 這個方法的內容。
        /// </summary>
        private void InitializeComponent()
        {
            this.splitContainer1 = new System.Windows.Forms.SplitContainer();
            this.panel1 = new System.Windows.Forms.Panel();
            this.btn_clear = new System.Windows.Forms.Button();
            this.btn_execute = new System.Windows.Forms.Button();
            this.gb_condition = new System.Windows.Forms.GroupBox();
            this.tb_command = new System.Windows.Forms.TextBox();
            this.btn_select = new System.Windows.Forms.Button();
            this.lb_Command = new System.Windows.Forms.Label();
            this.tb_file = new System.Windows.Forms.TextBox();
            this.lb_File = new System.Windows.Forms.Label();
            this.tb_packaging = new System.Windows.Forms.TextBox();
            this.lb_Packaging = new System.Windows.Forms.Label();
            this.tb_version = new System.Windows.Forms.TextBox();
            this.lb_Version = new System.Windows.Forms.Label();
            this.tb_artifactid = new System.Windows.Forms.TextBox();
            this.lb_ArtifactId = new System.Windows.Forms.Label();
            this.tb_groupid = new System.Windows.Forms.TextBox();
            this.lb_GroupId = new System.Windows.Forms.Label();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.tb_log = new System.Windows.Forms.TextBox();
            this.SelectJarFile = new System.Windows.Forms.OpenFileDialog();
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
            this.splitContainer1.Panel1.SuspendLayout();
            this.splitContainer1.Panel2.SuspendLayout();
            this.splitContainer1.SuspendLayout();
            this.panel1.SuspendLayout();
            this.gb_condition.SuspendLayout();
            this.groupBox1.SuspendLayout();
            this.SuspendLayout();
            // 
            // splitContainer1
            // 
            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.splitContainer1.Location = new System.Drawing.Point(0, 0);
            this.splitContainer1.Margin = new System.Windows.Forms.Padding(4);
            this.splitContainer1.Name = "splitContainer1";
            // 
            // splitContainer1.Panel1
            // 
            this.splitContainer1.Panel1.Controls.Add(this.panel1);
            this.splitContainer1.Panel1.Controls.Add(this.gb_condition);
            // 
            // splitContainer1.Panel2
            // 
            this.splitContainer1.Panel2.Controls.Add(this.groupBox1);
            this.splitContainer1.Size = new System.Drawing.Size(1067, 372);
            this.splitContainer1.SplitterDistance = 348;
            this.splitContainer1.SplitterWidth = 5;
            this.splitContainer1.TabIndex = 0;
            // 
            // panel1
            // 
            this.panel1.Controls.Add(this.btn_clear);
            this.panel1.Controls.Add(this.btn_execute);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
            this.panel1.Location = new System.Drawing.Point(0, 328);
            this.panel1.Margin = new System.Windows.Forms.Padding(4);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(348, 44);
            this.panel1.TabIndex = 1;
            // 
            // btn_clear
            // 
            this.btn_clear.Location = new System.Drawing.Point(240, 8);
            this.btn_clear.Margin = new System.Windows.Forms.Padding(4);
            this.btn_clear.Name = "btn_clear";
            this.btn_clear.Size = new System.Drawing.Size(100, 29);
            this.btn_clear.TabIndex = 0;
            this.btn_clear.Text = "Clear(&C)";
            this.btn_clear.UseVisualStyleBackColor = true;
            this.btn_clear.Click += new System.EventHandler(this.btn_clear_Click);
            // 
            // btn_execute
            // 
            this.btn_execute.Location = new System.Drawing.Point(8, 8);
            this.btn_execute.Margin = new System.Windows.Forms.Padding(4);
            this.btn_execute.Name = "btn_execute";
            this.btn_execute.Size = new System.Drawing.Size(97, 29);
            this.btn_execute.TabIndex = 0;
            this.btn_execute.Text = "Execute(&E)";
            this.btn_execute.UseVisualStyleBackColor = true;
            this.btn_execute.Click += new System.EventHandler(this.btn_execute_Click);
            // 
            // gb_condition
            // 
            this.gb_condition.Controls.Add(this.tb_command);
            this.gb_condition.Controls.Add(this.btn_select);
            this.gb_condition.Controls.Add(this.lb_Command);
            this.gb_condition.Controls.Add(this.tb_file);
            this.gb_condition.Controls.Add(this.lb_File);
            this.gb_condition.Controls.Add(this.tb_packaging);
            this.gb_condition.Controls.Add(this.lb_Packaging);
            this.gb_condition.Controls.Add(this.tb_version);
            this.gb_condition.Controls.Add(this.lb_Version);
            this.gb_condition.Controls.Add(this.tb_artifactid);
            this.gb_condition.Controls.Add(this.lb_ArtifactId);
            this.gb_condition.Controls.Add(this.tb_groupid);
            this.gb_condition.Controls.Add(this.lb_GroupId);
            this.gb_condition.Dock = System.Windows.Forms.DockStyle.Fill;
            this.gb_condition.Location = new System.Drawing.Point(0, 0);
            this.gb_condition.Margin = new System.Windows.Forms.Padding(4);
            this.gb_condition.Name = "gb_condition";
            this.gb_condition.Padding = new System.Windows.Forms.Padding(4);
            this.gb_condition.Size = new System.Drawing.Size(348, 372);
            this.gb_condition.TabIndex = 0;
            this.gb_condition.TabStop = false;
            this.gb_condition.Text = "Condition";
            // 
            // tb_command
            // 
            this.tb_command.Location = new System.Drawing.Point(92, 196);
            this.tb_command.Margin = new System.Windows.Forms.Padding(4);
            this.tb_command.Multiline = true;
            this.tb_command.Name = "tb_command";
            this.tb_command.ReadOnly = true;
            this.tb_command.Size = new System.Drawing.Size(247, 115);
            this.tb_command.TabIndex = 1;
            // 
            // btn_select
            // 
            this.btn_select.Location = new System.Drawing.Point(253, 161);
            this.btn_select.Margin = new System.Windows.Forms.Padding(4);
            this.btn_select.Name = "btn_select";
            this.btn_select.Size = new System.Drawing.Size(87, 29);
            this.btn_select.TabIndex = 0;
            this.btn_select.Text = "Select(&S)";
            this.btn_select.UseVisualStyleBackColor = true;
            this.btn_select.Click += new System.EventHandler(this.btn_select_Click);
            // 
            // lb_Command
            // 
            this.lb_Command.AutoSize = true;
            this.lb_Command.Location = new System.Drawing.Point(12, 202);
            this.lb_Command.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lb_Command.Name = "lb_Command";
            this.lb_Command.Size = new System.Drawing.Size(69, 15);
            this.lb_Command.TabIndex = 0;
            this.lb_Command.Text = "Command:";
            // 
            // tb_file
            // 
            this.tb_file.Location = new System.Drawing.Point(92, 161);
            this.tb_file.Margin = new System.Windows.Forms.Padding(4);
            this.tb_file.Name = "tb_file";
            this.tb_file.Size = new System.Drawing.Size(152, 25);
            this.tb_file.TabIndex = 1;
            // 
            // lb_File
            // 
            this.lb_File.AutoSize = true;
            this.lb_File.Location = new System.Drawing.Point(55, 168);
            this.lb_File.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lb_File.Name = "lb_File";
            this.lb_File.Size = new System.Drawing.Size(33, 15);
            this.lb_File.TabIndex = 0;
            this.lb_File.Text = "File:";
            // 
            // tb_packaging
            // 
            this.tb_packaging.Location = new System.Drawing.Point(92, 126);
            this.tb_packaging.Margin = new System.Windows.Forms.Padding(4);
            this.tb_packaging.Name = "tb_packaging";
            this.tb_packaging.Size = new System.Drawing.Size(247, 25);
            this.tb_packaging.TabIndex = 1;
            // 
            // lb_Packaging
            // 
            this.lb_Packaging.AutoSize = true;
            this.lb_Packaging.Location = new System.Drawing.Point(13, 132);
            this.lb_Packaging.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lb_Packaging.Name = "lb_Packaging";
            this.lb_Packaging.Size = new System.Drawing.Size(69, 15);
            this.lb_Packaging.TabIndex = 0;
            this.lb_Packaging.Text = "Packaging:";
            // 
            // tb_version
            // 
            this.tb_version.Location = new System.Drawing.Point(92, 91);
            this.tb_version.Margin = new System.Windows.Forms.Padding(4);
            this.tb_version.Name = "tb_version";
            this.tb_version.Size = new System.Drawing.Size(247, 25);
            this.tb_version.TabIndex = 1;
            // 
            // lb_Version
            // 
            this.lb_Version.AutoSize = true;
            this.lb_Version.Location = new System.Drawing.Point(29, 98);
            this.lb_Version.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lb_Version.Name = "lb_Version";
            this.lb_Version.Size = new System.Drawing.Size(55, 15);
            this.lb_Version.TabIndex = 0;
            this.lb_Version.Text = "Version:";
            // 
            // tb_artifactid
            // 
            this.tb_artifactid.Location = new System.Drawing.Point(92, 56);
            this.tb_artifactid.Margin = new System.Windows.Forms.Padding(4);
            this.tb_artifactid.Name = "tb_artifactid";
            this.tb_artifactid.Size = new System.Drawing.Size(247, 25);
            this.tb_artifactid.TabIndex = 1;
            // 
            // lb_ArtifactId
            // 
            this.lb_ArtifactId.AutoSize = true;
            this.lb_ArtifactId.Location = new System.Drawing.Point(17, 62);
            this.lb_ArtifactId.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lb_ArtifactId.Name = "lb_ArtifactId";
            this.lb_ArtifactId.Size = new System.Drawing.Size(67, 15);
            this.lb_ArtifactId.TabIndex = 0;
            this.lb_ArtifactId.Text = "ArtifactId:";
            // 
            // tb_groupid
            // 
            this.tb_groupid.Location = new System.Drawing.Point(92, 21);
            this.tb_groupid.Margin = new System.Windows.Forms.Padding(4);
            this.tb_groupid.Name = "tb_groupid";
            this.tb_groupid.Size = new System.Drawing.Size(247, 25);
            this.tb_groupid.TabIndex = 1;
            // 
            // lb_GroupId
            // 
            this.lb_GroupId.AutoSize = true;
            this.lb_GroupId.Location = new System.Drawing.Point(24, 26);
            this.lb_GroupId.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.lb_GroupId.Name = "lb_GroupId";
            this.lb_GroupId.Size = new System.Drawing.Size(59, 15);
            this.lb_GroupId.TabIndex = 0;
            this.lb_GroupId.Text = "GroupId:";
            // 
            // groupBox1
            // 
            this.groupBox1.Controls.Add(this.tb_log);
            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.groupBox1.Location = new System.Drawing.Point(0, 0);
            this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
            this.groupBox1.Size = new System.Drawing.Size(714, 372);
            this.groupBox1.TabIndex = 0;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "Log";
            // 
            // tb_log
            // 
            this.tb_log.Dock = System.Windows.Forms.DockStyle.Fill;
            this.tb_log.Location = new System.Drawing.Point(4, 22);
            this.tb_log.Margin = new System.Windows.Forms.Padding(4);
            this.tb_log.Multiline = true;
            this.tb_log.Name = "tb_log";
            this.tb_log.ReadOnly = true;
            this.tb_log.ScrollBars = System.Windows.Forms.ScrollBars.Both;
            this.tb_log.Size = new System.Drawing.Size(706, 346);
            this.tb_log.TabIndex = 0;
            // 
            // SelectJarFile
            // 
            this.SelectJarFile.FileName = "SelectJarFile";
            // 
            // MavenInstall
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(1067, 372);
            this.Controls.Add(this.splitContainer1);
            this.Margin = new System.Windows.Forms.Padding(4);
            this.Name = "MavenInstall";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "MavenInstall";
            this.splitContainer1.Panel1.ResumeLayout(false);
            this.splitContainer1.Panel2.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
            this.splitContainer1.ResumeLayout(false);
            this.panel1.ResumeLayout(false);
            this.gb_condition.ResumeLayout(false);
            this.gb_condition.PerformLayout();
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.SplitContainer splitContainer1;
        private System.Windows.Forms.Panel panel1;
        private System.Windows.Forms.Button btn_clear;
        private System.Windows.Forms.Button btn_execute;
        private System.Windows.Forms.GroupBox gb_condition;
        private System.Windows.Forms.TextBox tb_command;
        private System.Windows.Forms.Button btn_select;
        private System.Windows.Forms.Label lb_Command;
        private System.Windows.Forms.TextBox tb_file;
        private System.Windows.Forms.Label lb_File;
        private System.Windows.Forms.TextBox tb_packaging;
        private System.Windows.Forms.Label lb_Packaging;
        private System.Windows.Forms.TextBox tb_version;
        private System.Windows.Forms.Label lb_Version;
        private System.Windows.Forms.TextBox tb_artifactid;
        private System.Windows.Forms.Label lb_ArtifactId;
        private System.Windows.Forms.TextBox tb_groupid;
        private System.Windows.Forms.Label lb_GroupId;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.TextBox tb_log;
        private System.Windows.Forms.OpenFileDialog SelectJarFile;
    }
}


1个回答

 private void UpdateLog(string txt)
{
this.Invoke(new delegate() {

this.tb_log.Text += txt + "\r\n";
    });
}
wild84
wild84 不過時間太久了,還是把分給你吧.
2 天之前 回复
wild84
wild84 還是不行,這樣改之後無法通過編譯,delegate語法錯誤,不知道怎麼改
2 天之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# winfrom 内存问题,光Ui没逻辑
各位C#前辈,我做C#winfrom 什么逻辑还没写 光Ui就占了600 276K 怎么回事?怎么降低内存消耗? ![图片说明](https://img-ask.csdn.net/upload/201704/11/1491877572_213631.png) ![图片说明](https://img-ask.csdn.net/upload/201704/11/1491877587_245578.jpg)
关于C#看着头痛的UI 前辈们给些意见
刚接触C# 美工给的UI看着头痛 希望前辈们给点思路 有没有这种第三方控件 没有自己做有什么思路 下图两个控件 ![图片说明](https://img-ask.csdn.net/upload/201611/23/1479879722_77251.png) ![图片说明](https://img-ask.csdn.net/upload/201611/23/1479879735_83537.png)
C#windows服务 弹出一个ui窗体程序无法获取管理员权限
我现在有window服务运行中弹出ui窗体程序的需求,网上来找了代码,运行之后虽然能弹出ui窗体,但是因为没有管理员模式,无法启动端口监听,明明我服务创建的是系统管理员 代码如下 ``` try { string appStartPath = runCommand; IntPtr userTokenHandle = IntPtr.Zero; ApiDefinitions.WTSQueryUserToken(ApiDefinitions.WTSGetActiveConsoleSessionId(), ref userTokenHandle); ApiDefinitions.PROCESS_INFORMATION procInfo = new ApiDefinitions.PROCESS_INFORMATION(); ApiDefinitions.STARTUPINFO startInfo = new ApiDefinitions.STARTUPINFO(); startInfo.cb = (uint)Marshal.SizeOf(startInfo); ApiDefinitions.CreateProcessAsUser( userTokenHandle, appStartPath, "", IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref startInfo, out procInfo); if (userTokenHandle != IntPtr.Zero) ApiDefinitions.CloseHandle(userTokenHandle); int _currentAquariusProcessId = (int)procInfo.dwProcessId; currentAquariusProcessId = _currentAquariusProcessId; error = ""; return true; } catch (Exception e) { error = e.Message; } return false; ``` ![报错信息](https://img-ask.csdn.net/upload/201901/09/1547023814_238344.png)
C#的UI界面框架怎么样跳转
大家好,请教一个问题!使用 C# 开发一个桌面应用程序,是一个管理系统。UI界面框架如下: ![图片说明](https://img-ask.csdn.net/upload/201509/19/1442653417_973112.png) 怎么样能够实现,单击左边不同的条目,在右边显示不同的信息呢?使用什么控件能够实现?
C# 串口编程 UI更新延迟严重
串口波特率为115200,数据都能正常收到,但是UI更新的特别慢(无论是控件上面的数字,还是带有图像变化的)不是连续变化,而是跳跃性的,就像玩游戏一卡一卡的那种,实在不知道为什么,请大神指教如何解决?如果有说的不详细的地方,请继续多问一下,新手才入门,多指教。
c#,winform跨线程更改ui组件,出错,求大神帮帮忙
以下是截图: ![图片说明](https://img-ask.csdn.net/upload/201604/12/1460468841_274650.png) 源码: ``` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private delegate void d(int a, int b); d dt; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a = int.Parse(textBox1.Text); int b =int.Parse(textBox2.Text); Thread t = new Thread(()=>ThreadTest(a,b)); t.Start(); textBox1.Text = "a"; } private void Result(int a,int b) { label1.Visible = true; label1.Text = Convert.ToString(a, b); } private void ThreadTest(int a,int b) { if (label1.InvokeRequired) { while (!label1.IsHandleCreated) { if (label1.Disposing || label1.IsDisposed) return; } dt = new d(Result); label1.Invoke(dt, new object[] { a, b }); } else label1.Text = Convert.ToString(a + b); } } } ``` 运行的时候 ![图片说明](https://img-ask.csdn.net/upload/201604/12/1460469040_704093.png) 按了button后: ![图片说明](https://img-ask.csdn.net/upload/201604/12/1460469057_208543.png) 一直这样,有时还会在int a=Convert.ToInt32(textBox1.Text)报字符串转换为datetime应先分析什么什么的,我这里根本就没转为字符串格式。 求大神指点指点
C# click事件 多线程 异步 耗时 操作UI
listbox做了个目录(单层),点击一条就在另一个控件加载相应的内容。这个加载过程是耗时操作。 所以考虑用异步,在click处理函数里开了子线程。因为需要操作UI,所以在子线程里调用invoke,但是无论使用invoke还是beginInvoke,那个加载内容的函数都是在UI线程上执行。这样就会造成UI线程阻塞。 想实现的效果是,一次点击之后马上能响应下一次点击同时把上一次点击的加载线程结束掉而执行当前点击的加载线程。或者在下一次点击的时候判断上一次是否加载完成,如果没完成则提示,等待完成。 哪位熟悉这个的有什么好办法?
如何将Qt UI界面嵌入到C# WinForm中
最近, 想实现这样一个功能, 利用Qt做了一个播放器, 带UI界面, 为了方便, 希望能将这个Qt 窗体 直接嵌入到C# Winform中使用, 但不知道如何才能实现所谓的"嵌入"? 在网上查了一下, 说是要做成ocx或com组件, 然后在C#.Winform中以控件的方式嵌入, 如果是这样, 具体应该怎么做呢? 即: 如果将Qt 窗体应用程序改造为ocx或com控件呢?
关于外卖系统的问题(C#,Winform)
本人小白,学长要求我用winform做一个简易化的Pizza外卖系统,我学了C#的基础内容,还有一些关于sqlsever,linq的基础知识。我现在知道有客户端,服务端,数据库,但是现在让我从服务端开始写,可是我一点思路没有(也不是没有吧,如果稀里糊涂的开始写界面也能写下去,但是感觉自己就是瞎闯,不会去整体思考大体怎么去做)请各位前辈,学长指条路,只要有个方向,我自己再去摸索学习就可以。现在大脑一片空白。![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/8.gif)
C#处理ASCII码以外数字的MD5码加密怎么办?
比如C++处理(char)-65,MD5加密的时候会得到一组数据,C#在做MD5加密的时候会先将字符串转换成byte[],请问怎么用C#处理这同一个数得到相同的结果??很需要解决![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)
C# winfor m自动更新
现在在做一个 应用程序如何做自动更新?求解![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)求源码
VS下的UI设计怎么做,有函数介绍吗?
用C#做一个简单的UI设计,主要有确认啊,选择呀,文本框,数据显示啊等等之类的功能
Visual Studio C# 2015 WPF应用程序
VS C# 如何在一些button或textbox中去编写一个简单的程序?比如:某个数字输入进去,在所给范围之内,点击确定键就能够输出相应的内容。![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/17.gif)求答,谢谢!
c#怎么实现读取word文档
c#怎么在richtextbox里读取word文档,并且可以编辑,然后进行保存,怎么写![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/9.gif)
求助,想用C#的winform里实现显示天气的功能
求助大神,小白一枚,就上过学校计算机课![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/1.gif),基本没有基础。现在想用C#在winform实现显示实时天气情况的功能,有没有大神帮帮我![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/1.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/1.gif)
如何用C#实现学生信息管理系统?
如何用C#实现学生信息管理系统啊?求大神指点迷津,求代码。。。。。![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/4.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/4.gif)
C#.net中GRIDVIEW的SQL更新语句的问题
** 我要做的是点击GRIDVIEW(代码加载的内容)中更新功能按钮 然后更新相关信息,由于某些原因(说起来太麻烦了),只能使用自己写的代码而不是自动生成的UPDATE语句。 但是自己写的UPDATE语句出现问题,更新信息失败。在SQL SERVER中能正常使用 所以我猜是调用GRIDVIEW中数据时出现问题。但是试过很多方法都不能使用 不知道问题出现在哪里 希望前辈们能帮我看看 下面贴出几张截图和代码 图一是在SQL中正常使用的代码 ![图片说明](https://img-ask.csdn.net/upload/201907/28/1564317571_252779.png) 图二所示 断点打完 那几个变量是空值 ![图片说明](https://img-ask.csdn.net/upload/201907/28/1564318065_147839.png) ![图片说明](https://img-ask.csdn.net/upload/201907/28/1564325064_323064.png) 下面贴出代码 这是后端代码 ``` using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class HTML_ScoreManage : System.Web.UI.Page { SqlConnection sqlcon; SqlCommand sqlcom; string strCon = "Data Source=DESKTOP-79153UB; Initial Catalog=db_StudentManage;Integrated Security=True"; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { bind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; bind(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) //出现问题的函数 { sqlcon = new SqlConnection(strCon); string sqlstr = "update tb_Choosec001 set SName='" +GridView1.Rows[e.RowIndex].Cells[1].Text.ToString().Trim() + "',Score='" + GridView1.Rows[e.RowIndex].Cells[2].Text.ToString().Trim() + "' where SId='" + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'"; //上面几个GRIDVIEW1表格中数据调用为空值 sqlcom = new SqlCommand(sqlstr, sqlcon); sqlcon.Open(); sqlcom.ExecuteNonQuery(); sqlcon.Close(); GridView1.EditIndex = -1; bind(); } //取消     protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)     {         GridView1.EditIndex = -1;         bind();     } public void bind()     { string sqlstr = "select * from tb_Choosec001";         sqlcon = new SqlConnection(strCon);         SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);         DataSet myds = new DataSet();         sqlcon.Open(); myda.Fill(myds, "tb_Choosec001");         GridView1.DataSource = myds;         GridView1.DataKeyNames = new string[] { "SId" };//主键         GridView1.DataBind();         sqlcon.Close();     } } ``` 下面是前端 ``` <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ScoreManage2.aspx.cs" Inherits="HTML_ScoreManage" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"> <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> <Columns> <asp:BoundField DataField="SId" HeaderText="学生ID" /> <asp:BoundField DataField="SName" HeaderText="学生姓名" /> <asp:BoundField DataField="Score" HeaderText="成绩" /> <asp:CommandField ShowSelectButton="True" /> <asp:CommandField ShowEditButton="True" /> </Columns> <EditRowStyle BackColor="#999999" /> <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#E9E7E2" /> <SortedAscendingHeaderStyle BackColor="#506C8C" /> <SortedDescendingCellStyle BackColor="#FFFDF8" /> <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> </asp:GridView> </div> </form> </body> </html> ```
怎样写一个c#控制台程序
怎样用c#写一个控制台程序,要求在控制台输入一个日期,计算下一天日期并输出。若无效,则输出无效![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)哪位大佬帮个忙![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/63.gif)
求教c#多线程操作串口的方法
需求是这样的。 1.有一个UI的主线程 。里面需要调用 串口通信。往里面发送消息。 2.另一方满我需要循环去取该串口有没有新的消息发送过来。然后将发送过来的消息传递给UI的主线程。 c#新手。请教各位。该怎么实现?
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱 极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12) 选择需要启...
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Ol4网格生成以及优化
概述 先描述一下大致场景:以0.05为单元格大小生成网格,并在地图上绘制,绘制的时候需要区分海陆。本文以此需求为契机,简单描述一下该需求的实现以及如何来优化。 效果 实现 优化前 var source = new ol.source.Vector({ features: [] }); var vector = new ol.layer.Vector({ source...
11月19日科技资讯|华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布
「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。扫描上方二维码进入 CSDN App 可以收听御姐萌妹 Style 的人工版音频哟。 一分钟速览新闻点! 6G 专家组成员:速率是 5G 的 10 至 100 倍,预计 2030 年商用 雷军:很多人多次劝我放弃WPS,能坚持下来并不是纯粹的商业决定 ...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
程序员该看的几部电影
1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?如何...
蓝桥杯知识点汇总:基础知识和常用算法
文章目录基础语法部分:算法竞赛常用API:算法部分数据结构部分 此系列包含蓝桥杯绝大部分所考察的知识点,以及真题题解~ 基础语法部分: 备战蓝桥杯java(一):一般输入输出 和 快速输入输(BufferedReader&amp;BufferedWrite) 备战蓝桥杯java(二):java编程规范和常用数据类型 备战蓝桥杯java(三):常用功能符以及循环结构和分支结构 备战蓝桥杯java(四...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
@程序员,如何花式构建线程?
作者 |曾建责编 | 郭芮出品 | CSDN(ID:CSDNnews)在项目和业务的开发中,我们难免要经常使用线程来进行业务处理,使用线程可以保证我们的业务在相互处理之间可以保证原子性...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
实现简单的轮播图(单张图片、多张图片)
前言 刚学js没多久,这篇博客就当做记录了,以后还会完善的,希望大佬们多多指点。ps:下面出现的都是直接闪动,没有滑动效果的轮播图。 单张图片的替换 · ...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 意思是密码。 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mkdir:Make directory ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
疫情数据接口api
返回json示例 { "errcode":0,//0标识接口正常 "data":{ "date":"2020-01-30 07:47:23",//实时更新时间 "diagnosed":7736,//确诊人数 "suspect":12167,//疑是病例人数 "death":170,//死亡人数 "cur...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问