gpt4 book ai didi

c# - 如何ReportProgress多个值?

转载 作者:行者123 更新时间:2023-12-02 04:05:06 24 4
gpt4 key购买 nike

我正在尝试在单个 DoWork 中发送数组,但是在 ReportProgress 中,无法接收数组,我不确定应该做什么才能传递数组,如果有人有的话,我真的很感激任何想法。

这就是我想要做的:

public void backgroundWorkerXY_DoWork(object sender, DoWorkEventArgs e)
{
do
{
X = -(RSSI_PI1_ST1);
Y = -(RSSI_PI1_ST1) + 5;
backgroundWorkerX.ReportProgress(X,Y); // pass X and Y

Thread.Sleep(50);
} while (true);
}

然后在这里传递这两个值来更改图像的位置:

    public void backgroundWorkerXY_ProgressChanged(object sender, object sender1, ProgressChangedEventArgs e)
{
pictureBox1.Location = new Point((int.Parse(e.ProgressPercentage.ToString())), (int.Parse(e.ProgressPercentage.ToString())) );
// Not sure how to let a single ProgressChanged to send two values here
}

还有一种替代方法是将它们分开,例如,传递 X 和传递 Y,但是要更改图像的位置,值必须是一个包含 2 个值的点(到目前为止我发现,可能不正确),所以我假设它必须在单个 ProgressChanged 中,

这也是我尝试过的

pictureBox1.Location.X = new Point((int.Parse(e.ProgressPercentage.ToString())));

但是它说“CS1612 无法修改“Control.Location”的返回值,因为它不是变量”

我想做的是更改 X 和 Y 的位置,我非常欢迎任何替代解决方案,非常感谢任何想法或想法!

最佳答案

ReportProgress接受第二个参数作为对象。您可以使用它返回自定义数据类型或简单地使用 Tuple .

public void backgroundWorkerXY_DoWork(object sender, DoWorkEventArgs e)
{
do
{
X = -(RSSI_PI1_ST1);
Y = -(RSSI_PI1_ST1) + 5;
backgroundWorkerX.ReportProgress(50, new Tuple<int, int>(X,Y));

Thread.Sleep(50);
} while (true);
}

UserState将被传递给 ProgressChanged 事件参数

public void backgroundWorkerXY_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var args = (Tuple<int, int>)e.UserState;
pictureBox1.Location = new Point(args.Item1, args.Item2) );
}

关于c# - 如何ReportProgress多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39869525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com