C# System.Threading.ThreadStateException OpenFileDialog
今天,我试图用C语言制作一个具有良好GUI的adb客户机。 所以,我做了一些研究,发现了SharpAdbClient 要进行文件推送,我使用var file=openFileDialog2.ShowDialog;选择一个文件。 但是如果我尝试推送一个大文件,GUI就会停止响应它应该是什么样子 因此,为了解决这个问题,我设置了一个执行推送的线程,但是当我尝试启动OpenFileDialog时,我得到了一个ThreadStateException 下面是一个示例代码: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
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检索文件,验证,然后将文件路径作为其对象参数传递给线程吗?