我有一个场景.(Windows Forms,C#,.NET)
UserControl_Load方法,则UI在加载方法执行的持续时间内变得无响应.伪代码看起来像这样:
代码1
UserContrl1_LoadDataMethod()
{
if (textbox1.text == "MyName") // This gives exception
{
//Load data corresponding to "MyName".
//Populate a globale variable List<string> which will be binded to grid at some later stage.
}
}
Run Code Online (Sandbox Code Playgroud)
它给出的例外是
跨线程操作无效:从创建它的线程以外的线程访问控件.
为了更多地了解这一点,我做了一些谷歌搜索,并提出了一个建议,如使用下面的代码
代码2
UserContrl1_LoadDataMethod()
{
if (InvokeRequired) // Line #1
{
this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
return;
}
if (textbox1.text == "MyName") // Now it wont give an exception
{
//Load data correspondin to "MyName"
//Populate a globale …Run Code Online (Sandbox Code Playgroud) 目前我正在使用WinForms(在C#中),我必须在后台运行该应用程序.为此我正在使用异步.当我运行应用程序时,它显示了一个例外
"跨线程操作无效:控制''从创建它的线程以外的线程访问."
我该如何解决这个错误?
我希望我的后台工作者将项目添加到列表框中,它在调试时似乎这样做,但列表框不显示值.我怀疑这与在后台工作线程中添加项目有关,我是否需要将这些添加到数组中,然后在数组中填充列表框backgroundWorker1_RunWorkerCompleted?
谢谢您的帮助.
我是winforms的新手,在我的代码中,我正在使用for循环更新进度条,现在我需要以循环计数的形式更新Label,如下所示-
公共部分类Form1:表单{public Form1(){InitializeComponent();
Run Code Online (Sandbox Code Playgroud)Shown += new EventHandler(Form1_Shown); // To report progress from the background worker we need to set this property backgroundWorker1.WorkerReportsProgress = true; // This event will be raised on the worker thread when the worker starts backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); // This event will be raised when we call ReportProgress backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); } private void Form1_Load(object sender, EventArgs e) { } void Form1_Shown(object sender, EventArgs e) { // Start the background worker backgroundWorker1.RunWorkerAsync(); } …