标签: invoke

this.Invoke抛出无法从'方法组'转换为'System.Delegate'

我不知道如何解释,所以这是我的代码:

this.Invoke(listBox1.Items.Add, new Object[] { e.Data.ToString() });
Run Code Online (Sandbox Code Playgroud)

但是,如果我没有任何错误,一切都会好的,但遗憾的是我有2个错误:

错误1

'System.Windows.Forms.Control.Invoke(System.Delegate,params object [])'的最佳重载方法匹配有一些无效的参数

错误2

参数1:无法从'方法组'转换为'System.Delegate'

我该怎么做才能克服这些异常?

c# invoke winforms

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

C# 在单独的线程上调用按钮控件

我看到了很多关于如何从不同线程编辑 c# 表单上的控件的问题,但对我来说没有多大意义。我知道您不能从主线程以外的其他线程更改任何 UI。为了使这项工作有效,您必须使用调用并从那里安全地编辑控件?

我有一个按钮开始写入文件,当您按下按钮时,按钮本身就会被禁用,因此您无法启动执行完全相同操作的多个线程。写入完成后,我希望按钮再次可用,但我无法让它在另一个线程上工作。

我将其作为表单中的Generate_Click 事件。

private void Generate_Click(object sender, EventArgs e)
{
    Generate.Enabled = false;

    int x = 512;
    int y = 512;

    MBrot mbrot = new MBrot(x, y);

    PB_Update lb = new PB_Update(0, y, Generator_PB, Generate, mbrot, this);
    lb.Start();
}
Run Code Online (Sandbox Code Playgroud)

这是 PB_Update.cs 中的 ThreadWork() 函数,当 while 循环完成时,对文件的写入完成,线程也完成,因此它结束并给出一个带有“finished”的消息框,现在作为最后一个按钮需要再次启用。

public void ThreadWork()
{
    while (true)
    {
        if (currValue_ >= maxValue_)
            break;

        ThreadTick();
    }

    mb_.StopBrot();
    t_.Interrupt();

    MessageBox.Show("Finished!");
    Generate_.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)

c# controls multithreading invoke winforms

0
推荐指数
1
解决办法
9199
查看次数

c#foreach with Action.BeginInvoke

好吧,所以我在这里遇到了一些问题.这是循环.

lock (ClientLocker)
{
    Trace.WriteLine("#WriteAll: " + sm.Header);
    foreach (Client c in Clients)
    {
        if (c.LoggedIn)
        {
            Trace.WriteLine("#TryWriteTo[" + c.Id + "](" + sm.Header + ")");
            LazyAsync.Invoke(() => c.WriteMessage(sm));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是LazyAsync

public static class LazyAsync
{
    public static void Invoke(Action a)
    {
        a.BeginInvoke(a.EndInvoke, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

每个Client包含一个socket,所以我不能Clone这么做.问题是,当我执行Invoketo时c.WriteMessage,由于执行被延迟,它通常不会触发列表中的第一对,并且有时实际上只会在最后一项上触发一大堆.

我知道这与c是一个在Invoke实际被调用之前发生变化的引用有关,但有没有办法避免这种情况?

执行一般for(int i=0 etc循环似乎无法解决此问题.

任何人对我如何解决这个问题都有任何想法?

记住,不能Clone Client.

c# concurrency delegates action invoke

-1
推荐指数
1
解决办法
1204
查看次数

Java - 调用静态方法会在所有实例上调用该方法吗?

假设我有一个类A,它有自己的实例变量.它有一个名为的方法doSomething(),它是一种static方法.现在,A添加另一个类B作为一些指针.在课堂上说B,我运行一些逻辑,并确定我需要运行包含在其中的代码doSomething().我可以这么说A.doSomething()吗?如果我有一个实例Aa,确实adoSomething()方法被调用?

java static class invoke

-1
推荐指数
1
解决办法
295
查看次数

使用计时器和2个按钮进行跨线程操作无效

我有这个问题...

有什么好的解决方案?

 private void button1_Click(object sender, EventArgs e)
    {
        aTimer.Enabled = true;
        button1.Enabled = false;

    }

    private void button2_Click(object sender, EventArgs e)
    {
        aTimer.Enabled = false;
    }

    private void timer_is_working(object source, ElapsedEventArgs e)
    {
        aTimer.Enabled = false;
        button1.Enabled = true;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!此致Daniel Ruescher

c# exception invoke

-3
推荐指数
1
解决办法
1433
查看次数

Begin Invoke未运行

System.Windows.Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() => ...用于wpf图形刷新.

它非常适用于我的其他功能,但是在我的SQL删除功能中,它会被触发/执行.

我试了一下,System.Windows.Forms.Application.DoEvents();但它做了什么.

Set_Loading_Changed()
{
    System.Windows.Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() =>
    {
        if (BLoading)
        {
            TextBox_Warten.Margin = new Thickness(ComboBox_Such_Optionen.Margin.Left, ComboBox_Such_Optionen.Margin.Top, Btn_Suchen.Margin.Right, Btn_Suchen.Margin.Bottom);

            DataGrid_Anzeige.IsEnabled = false;

            foreach (System.Windows.Controls.TextBox TextBox_Temp in Grid_Mw.Children.OfType<System.Windows.Controls.TextBox>().Where(x => !x.Name.Contains("TextBox_Warten")))
            {
                TextBox_Temp.IsEnabled = false;
            }

            foreach (System.Windows.Controls.Button Btn_Temp in Grid_Mw.Children.OfType<System.Windows.Controls.Button>())
            {
                Btn_Temp.IsEnabled = false;
            }

            foreach (System.Windows.Controls.ComboBox ComboBox_Temp in Grid_Mw.Children.OfType<System.Windows.Controls.ComboBox>())
            {
                ComboBox_Temp.IsEnabled = false;
            }

            Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait;
        }
        else
        {
            DataGrid_Anzeige.IsEnabled = true;

            DataGrid_Anzeige.Opacity = 100;

            TextBox_Warten.Margin = new Thickness(-TextBox_Warten.Width - …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading invoke dispatcher

-5
推荐指数
1
解决办法
672
查看次数

创建实例并调用程序集的静态Main

我在创建静态void Main()的程序集实例时遇到问题.

Heres是程序集的代码(.NET Exe)

namespace Test
{ 
    internal static class Program
    {

        [STAThread]
        private static void Main(string[] args)
Run Code Online (Sandbox Code Playgroud)

这是启动器代码:bin是一个包含从文件读取的程序集的字节数组.

Assembly asm = Assembly.Load(bin); 
MethodInfo method = asm.EntryPoint;
object obj = asm.CreateInstance(method.ToString());
method.Invoke(obj, null);
Run Code Online (Sandbox Code Playgroud)

由于参数不匹配,obj始终为null并且Invoke抛出异常.

c# createinstance invoke .net-assembly

-7
推荐指数
1
解决办法
406
查看次数