C# System.Threading.ThreadStateException OpenFileDialog

C# System.Threading.ThreadStateException OpenFileDialog,c#,multithreading,winforms,adb,C#,Multithreading,Winforms,Adb,今天,我试图用C语言制作一个具有良好GUI的adb客户机。 所以,我做了一些研究,发现了SharpAdbClient 要进行文件推送,我使用var file=openFileDialog2.ShowDialog;选择一个文件。 但是如果我尝试推送一个大文件,GUI就会停止响应它应该是什么样子 因此,为了解决这个问题,我设置了一个执行推送的线程,但是当我尝试启动OpenFileDialog时,我得到了一个ThreadStateException 下面是一个示例代码: private void bu

今天,我试图用C语言制作一个具有良好GUI的adb客户机。 所以,我做了一些研究,发现了SharpAdbClient

要进行文件推送,我使用var file=openFileDialog2.ShowDialog;选择一个文件。 但是如果我尝试推送一个大文件,GUI就会停止响应它应该是什么样子

因此,为了解决这个问题,我设置了一个执行推送的线程,但是当我尝试启动OpenFileDialog时,我得到了一个ThreadStateException

下面是一个示例代码:

private void button4_Click(object sender, EventArgs e)
{
    Thread pushFile = new Thread(push);
    pushFile.Start();
}

private void push()
{
    var device = AdbClient.Instance.GetDevices().First();
    var file = openFileDialog2.ShowDialog();
    var p = new Progress<int>(Progress_Bar);

    String newPath = textBox2.Text;
    if (file == DialogResult.OK)
    {
        String filePath = openFileDialog2.InitialDirectory + openFileDialog2.FileName;
        using (SyncService service = new SyncService(new AdbSocket(new IPEndPoint(IPAddress.Loopback, AdbClient.AdbServerPort)), device))
        using (Stream stream = File.OpenRead(filePath))
        {
            service.Push(stream, newPath, 444, DateTime.Now, p, CancellationToken.None);
        }
    }
}

不能在非GUI线程的线程上调用UI方法。您必须将其分派到正确的线程。在WinForms中,您可以使用Invoke、BeginInvoke和类似的方法来实现这一点


查看以获取更多信息。

请发送异常消息和堆栈跟踪。在启动线程之前,您不能从openFileDialog2检索文件,验证,然后将文件路径作为其对象参数传递给线程吗?