相关疑难解决方法(0)

如何从其他线程更新GUI?

Label从另一个线程更新a的最简单方法是什么?

我有一Formthread1,并从我开始另一个线程(thread2).虽然thread2在处理一些文件,我想更新LabelForm用的当前状态thread2的工作.

我怎样才能做到这一点?

.net c# user-interface multithreading winforms

1331
推荐指数
41
解决办法
63万
查看次数

使用Application.DoEvents()

可以Application.DoEvents()在C#中使用吗?

这个函数是否能够让GUI跟上应用程序的其余部分,就像VB6 DoEvents一样?

c# doevents winforms

263
推荐指数
6
解决办法
17万
查看次数

在Windows窗体中处理时更新标签

在处理时更新Windows窗体应用程序上的标签的最佳方法是什么?

当用户单击按钮时,我有一个循环对用户系统上的文件进行一些处理.

foreach (System.IO.FileInfo f in dir.GetFiles("*.txt"))
{
   // Do processing
   // Show progress bar
   // Update Label on Form, "f.Name is done processing, now processing..."
}
Run Code Online (Sandbox Code Playgroud)

一些示例代码是什么?

究竟是什么叫做?它是线程还是代理?

label progress winforms

32
推荐指数
3
解决办法
7万
查看次数

为什么不控制更新/刷新中间进程

我有一个带有statusLabel的Windows窗体(C#.NET),我似乎无法在事件处理程序方法的过程中更新.我的代码看起来像这样......

    void Process_Completed(object sender, EventArgs e)
    {

        string t = "Process is finished!";
        this.Invoke(new StatusLabelUpdator(updateStatusLabel), new object[] { t });
    }

    void Process_Started(object sender, EventArgs e)
    {
        string t = "Process has begun";
        this.Invoke(new StatusLabelUpdator(updateStatusLabel), new object[] { t });
    }

    private delegate void StatusLabelUpdator(string text);
    private void updateStatusLabel(string text)
    {
        StatusLabel1.Text = text;
        statusStrip1.Invalidate();
        statusStrip1.Refresh();
        statusStrip1.Update();
    }
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,一旦进程启动,就会触发Process_Started方法,几秒钟后会触发Process_Completed方法.由于某种原因,我不能让状态标签显示"过程已经开始".它只显示"过程完成!".正如您所看到的,我已尝试使包含状态标签但未成功的状态条无效,刷新和更新.我无法在statuslabel本身上调用update/refresh/invalidate,因为这些方法不可用.我究竟做错了什么?

添加信息:

通过单击窗体上的按钮启动"进程",该窗体在单独的类中调用方法,如下所示:

public void DoSomeProcess()
{
    TriggerProcessStarted();
    System.Threading.Thread.Sleep(2000);   // For testing..
    TriggerProcessComplete();
}
Run Code Online (Sandbox Code Playgroud)

在TriggerProcessxxxx方法中,我使用此代码触发事件...

var EventListeners = EH.GetInvocationList();    //EH is the …
Run Code Online (Sandbox Code Playgroud)

.net c# controls refresh

12
推荐指数
1
解决办法
3万
查看次数

每秒加载新图像

我需要加载每秒(或两个)新图像.

以下代码不起作用:

System.Threading.Thread.Sleep(2000);
this.Image_LoadImage.Source = new BitmapImage(new Uri(@"D:\\connect2-1.gif"));
System.Threading.Thread.Sleep(2000);
this.Image_LoadImage.Source = new BitmapImage(new Uri(@"D:\\connect3-1.gif"));
Run Code Online (Sandbox Code Playgroud)

我看到的是该应用程序睡眠4秒,然后出现第二个图像.

我该怎么做?谢谢.

.net c# wpf multithreading image

2
推荐指数
2
解决办法
1924
查看次数